use super::*; impl From for AssetEntityBindingInput { fn from(input: module_assets::AssetEntityBindingInput) -> Self { Self { binding_id: input.binding_id, asset_object_id: input.asset_object_id, entity_kind: input.entity_kind, entity_id: input.entity_id, slot: input.slot, asset_kind: input.asset_kind, owner_user_id: input.owner_user_id, profile_id: input.profile_id, updated_at_micros: input.updated_at_micros, } } } impl From for AssetObjectUpsertInput { fn from(input: module_assets::AssetObjectUpsertInput) -> Self { Self { asset_object_id: input.asset_object_id, bucket: input.bucket, object_key: input.object_key, access_policy: map_access_policy(input.access_policy), content_type: input.content_type, content_length: input.content_length, content_hash: input.content_hash, version: input.version, source_job_id: input.source_job_id, owner_user_id: input.owner_user_id, profile_id: input.profile_id, entity_id: input.entity_id, asset_kind: input.asset_kind, updated_at_micros: input.updated_at_micros, } } } impl From for AssetHistoryListInput { fn from(input: module_assets::AssetHistoryListInput) -> Self { Self { asset_kind: input.asset_kind, limit: input.limit, } } } pub(crate) fn map_procedure_result( result: AssetObjectProcedureResult, ) -> Result { if !result.ok { return Err(SpacetimeClientError::procedure_failed(result.error_message)); } let snapshot = result .record .ok_or_else(|| SpacetimeClientError::missing_snapshot("对象快照"))?; Ok(build_asset_object_record(map_snapshot(snapshot))) } pub(crate) fn map_entity_binding_procedure_result( result: AssetEntityBindingProcedureResult, ) -> Result { if !result.ok { return Err(SpacetimeClientError::procedure_failed(result.error_message)); } let snapshot = result .record .ok_or_else(|| SpacetimeClientError::missing_snapshot("绑定快照"))?; Ok(build_asset_entity_binding_record( map_entity_binding_snapshot(snapshot), )) } pub(crate) fn map_entity_binding_snapshot( snapshot: AssetEntityBindingSnapshot, ) -> module_assets::AssetEntityBindingSnapshot { module_assets::AssetEntityBindingSnapshot { binding_id: snapshot.binding_id, asset_object_id: snapshot.asset_object_id, entity_kind: snapshot.entity_kind, entity_id: snapshot.entity_id, slot: snapshot.slot, asset_kind: snapshot.asset_kind, owner_user_id: snapshot.owner_user_id, profile_id: snapshot.profile_id, created_at_micros: snapshot.created_at_micros, updated_at_micros: snapshot.updated_at_micros, } } pub(crate) fn map_snapshot( snapshot: AssetObjectUpsertSnapshot, ) -> module_assets::AssetObjectUpsertSnapshot { module_assets::AssetObjectUpsertSnapshot { asset_object_id: snapshot.asset_object_id, bucket: snapshot.bucket, object_key: snapshot.object_key, access_policy: map_access_policy_back(snapshot.access_policy), content_type: snapshot.content_type, content_length: snapshot.content_length, content_hash: snapshot.content_hash, version: snapshot.version, source_job_id: snapshot.source_job_id, owner_user_id: snapshot.owner_user_id, profile_id: snapshot.profile_id, entity_id: snapshot.entity_id, asset_kind: snapshot.asset_kind, created_at_micros: snapshot.created_at_micros, updated_at_micros: snapshot.updated_at_micros, } } pub(crate) fn map_asset_object_row(row: AssetObject) -> AssetObjectRecord { build_asset_object_record(module_assets::AssetObjectUpsertSnapshot { asset_object_id: row.asset_object_id, bucket: row.bucket, object_key: row.object_key, access_policy: map_access_policy_back(row.access_policy), content_type: row.content_type, content_length: row.content_length, content_hash: row.content_hash, version: row.version, source_job_id: row.source_job_id, owner_user_id: row.owner_user_id, profile_id: row.profile_id, entity_id: row.entity_id, asset_kind: row.asset_kind, created_at_micros: row.created_at.to_micros_since_unix_epoch(), updated_at_micros: row.updated_at.to_micros_since_unix_epoch(), }) } pub(crate) fn map_access_policy( value: AssetObjectAccessPolicy, ) -> crate::module_bindings::AssetObjectAccessPolicy { match value { AssetObjectAccessPolicy::Private => { crate::module_bindings::AssetObjectAccessPolicy::Private } AssetObjectAccessPolicy::PublicRead => { crate::module_bindings::AssetObjectAccessPolicy::PublicRead } } } pub(crate) fn map_access_policy_back( value: crate::module_bindings::AssetObjectAccessPolicy, ) -> AssetObjectAccessPolicy { match value { crate::module_bindings::AssetObjectAccessPolicy::Private => { AssetObjectAccessPolicy::Private } crate::module_bindings::AssetObjectAccessPolicy::PublicRead => { AssetObjectAccessPolicy::PublicRead } } } impl TryFrom<&str> for BigFishAssetKind { type Error = SpacetimeClientError; fn try_from(value: &str) -> Result { match value.trim() { "level_main_image" => Ok(Self::LevelMainImage), "level_motion" => Ok(Self::LevelMotion), "stage_background" => Ok(Self::StageBackground), other => Err(SpacetimeClientError::Runtime(format!( "big fish asset kind `{other}` 当前尚未支持" ))), } } } #[derive(Clone, Debug, PartialEq)] pub struct CustomWorldDraftCardRecord { pub card_id: String, pub kind: String, pub title: String, pub subtitle: String, pub summary: String, pub status: String, pub linked_ids: Vec, pub warning_count: u32, pub asset_status: Option, pub asset_status_label: Option, pub detail_payload: Option, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct CustomWorldDraftCardDetailRecord { pub card_id: String, pub kind: String, pub title: String, pub sections: Vec, pub linked_ids: Vec, pub locked: bool, pub editable: bool, pub editable_section_ids: Vec, pub warning_messages: Vec, pub asset_status: Option, pub asset_status_label: Option, } #[derive(Clone, Debug, PartialEq)] pub struct CustomWorldAgentSessionRecord { pub session_id: String, pub seed_text: String, pub current_turn: u32, pub anchor_content: serde_json::Value, pub progress_percent: u32, pub last_assistant_reply: Option, pub stage: String, pub focus_card_id: Option, pub creator_intent: serde_json::Value, pub creator_intent_readiness: serde_json::Value, pub anchor_pack: serde_json::Value, pub lock_state: serde_json::Value, pub draft_profile: serde_json::Value, pub messages: Vec, pub draft_cards: Vec, pub pending_clarifications: Vec, pub suggested_actions: Vec, pub recommended_replies: Vec, pub quality_findings: Vec, pub asset_coverage: serde_json::Value, pub checkpoints: Vec, pub supported_actions: Vec, pub publish_gate: Option, pub result_preview: Option, pub updated_at: String, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct CustomWorldAgentSessionCreateRecordInput { pub session_id: String, pub owner_user_id: String, pub seed_text: String, pub welcome_message_id: String, pub welcome_message_text: String, pub anchor_content_json: String, pub creator_intent_json: Option, pub creator_intent_readiness_json: String, pub anchor_pack_json: Option, pub lock_state_json: Option, pub draft_profile_json: Option, pub pending_clarifications_json: String, pub suggested_actions_json: String, pub recommended_replies_json: String, pub quality_findings_json: String, pub asset_coverage_json: String, pub checkpoints_json: String, pub created_at_micros: i64, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct CustomWorldAgentMessageFinalizeRecordInput { pub session_id: String, pub owner_user_id: String, pub operation_id: String, pub assistant_message_id: Option, pub assistant_reply_text: Option, pub phase_label: String, pub phase_detail: String, pub operation_status: String, pub operation_progress: u32, pub stage: String, pub progress_percent: u32, pub focus_card_id: Option, pub anchor_content_json: String, pub creator_intent_json: Option, pub creator_intent_readiness_json: String, pub anchor_pack_json: Option, pub draft_profile_json: Option, pub pending_clarifications_json: String, pub suggested_actions_json: String, pub recommended_replies_json: String, pub quality_findings_json: String, pub asset_coverage_json: String, pub error_message: Option, pub updated_at_micros: i64, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct VisualNovelAgentSessionCreateRecordInput { pub session_id: String, pub owner_user_id: String, pub source_mode: String, pub seed_text: String, pub source_asset_ids_json: String, pub welcome_message_id: String, pub welcome_message_text: String, pub draft_json: Option, pub created_at_micros: i64, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct VisualNovelWorkUpdateRecordInput { pub profile_id: String, pub owner_user_id: String, pub work_title: String, pub work_description: String, pub tags_json: String, pub cover_image_src: Option, pub source_asset_ids_json: String, pub draft_json: String, pub publish_ready: bool, pub updated_at_micros: i64, } #[derive(Clone, Debug, PartialEq)] pub struct VisualNovelAgentSessionRecord { pub session_id: String, pub owner_user_id: String, pub source_mode: String, pub status: String, pub seed_text: String, pub source_asset_ids: Vec, pub current_turn: u32, pub progress_percent: u32, pub messages: Vec, pub draft: Option, pub pending_action: Option, pub last_assistant_reply: Option, pub published_profile_id: Option, pub created_at: String, pub updated_at: String, } #[derive(Clone, Debug, PartialEq)] pub struct VisualNovelWorkProfileRecord { pub work_id: String, pub profile_id: String, pub owner_user_id: String, pub source_session_id: Option, pub author_display_name: String, pub work_title: String, pub work_description: String, pub tags: Vec, pub cover_image_src: Option, pub source_asset_ids: Vec, pub draft: serde_json::Value, pub publication_status: String, pub publish_ready: bool, pub play_count: u32, pub created_at: String, pub updated_at: String, pub published_at: Option, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct BigFishAssetGenerateRecordInput { pub session_id: String, pub owner_user_id: String, pub asset_kind: String, pub level: Option, pub motion_key: Option, pub asset_url: Option, pub generated_at_micros: i64, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct BigFishAssetSlotRecord { pub slot_id: String, pub asset_kind: String, pub level: Option, pub motion_key: Option, pub status: String, pub asset_url: Option, pub prompt_snapshot: String, pub updated_at: String, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct BigFishAssetCoverageRecord { pub level_main_image_ready_count: u32, pub level_motion_ready_count: u32, pub background_ready: bool, pub required_level_count: u32, pub publish_ready: bool, pub blockers: Vec, } #[derive(Clone, Debug, PartialEq)] pub struct BigFishSessionRecord { pub session_id: String, pub current_turn: u32, pub progress_percent: u32, pub stage: String, pub anchor_pack: BigFishAnchorPackRecord, pub draft: Option, pub asset_slots: Vec, pub asset_coverage: BigFishAssetCoverageRecord, pub messages: Vec, pub last_assistant_reply: Option, pub publish_ready: bool, pub updated_at: String, }