403 lines
13 KiB
Rust
403 lines
13 KiB
Rust
use super::*;
|
|
|
|
impl From<module_assets::AssetEntityBindingInput> 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<module_assets::AssetObjectUpsertInput> 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<module_assets::AssetHistoryListInput> 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<AssetObjectRecord, SpacetimeClientError> {
|
|
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<AssetEntityBindingRecord, SpacetimeClientError> {
|
|
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<Self, Self::Error> {
|
|
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<String>,
|
|
pub warning_count: u32,
|
|
pub asset_status: Option<String>,
|
|
pub asset_status_label: Option<String>,
|
|
pub detail_payload: Option<serde_json::Value>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct CustomWorldDraftCardDetailRecord {
|
|
pub card_id: String,
|
|
pub kind: String,
|
|
pub title: String,
|
|
pub sections: Vec<CustomWorldDraftCardDetailSectionRecord>,
|
|
pub linked_ids: Vec<String>,
|
|
pub locked: bool,
|
|
pub editable: bool,
|
|
pub editable_section_ids: Vec<String>,
|
|
pub warning_messages: Vec<String>,
|
|
pub asset_status: Option<String>,
|
|
pub asset_status_label: Option<String>,
|
|
}
|
|
|
|
#[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<String>,
|
|
pub stage: String,
|
|
pub focus_card_id: Option<String>,
|
|
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<CustomWorldAgentMessageRecord>,
|
|
pub draft_cards: Vec<CustomWorldDraftCardRecord>,
|
|
pub pending_clarifications: Vec<serde_json::Value>,
|
|
pub suggested_actions: Vec<serde_json::Value>,
|
|
pub recommended_replies: Vec<String>,
|
|
pub quality_findings: Vec<serde_json::Value>,
|
|
pub asset_coverage: serde_json::Value,
|
|
pub checkpoints: Vec<CustomWorldCheckpointRecord>,
|
|
pub supported_actions: Vec<CustomWorldSupportedActionRecord>,
|
|
pub publish_gate: Option<CustomWorldPublishGateRecord>,
|
|
pub result_preview: Option<serde_json::Value>,
|
|
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<String>,
|
|
pub creator_intent_readiness_json: String,
|
|
pub anchor_pack_json: Option<String>,
|
|
pub lock_state_json: Option<String>,
|
|
pub draft_profile_json: Option<String>,
|
|
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<String>,
|
|
pub assistant_reply_text: Option<String>,
|
|
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<String>,
|
|
pub anchor_content_json: String,
|
|
pub creator_intent_json: Option<String>,
|
|
pub creator_intent_readiness_json: String,
|
|
pub anchor_pack_json: Option<String>,
|
|
pub draft_profile_json: Option<String>,
|
|
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<String>,
|
|
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<String>,
|
|
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<String>,
|
|
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<String>,
|
|
pub current_turn: u32,
|
|
pub progress_percent: u32,
|
|
pub messages: Vec<VisualNovelAgentMessageRecord>,
|
|
pub draft: Option<serde_json::Value>,
|
|
pub pending_action: Option<serde_json::Value>,
|
|
pub last_assistant_reply: Option<String>,
|
|
pub published_profile_id: Option<String>,
|
|
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<String>,
|
|
pub author_display_name: String,
|
|
pub work_title: String,
|
|
pub work_description: String,
|
|
pub tags: Vec<String>,
|
|
pub cover_image_src: Option<String>,
|
|
pub source_asset_ids: Vec<String>,
|
|
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<String>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct BigFishAssetGenerateRecordInput {
|
|
pub session_id: String,
|
|
pub owner_user_id: String,
|
|
pub asset_kind: String,
|
|
pub level: Option<u32>,
|
|
pub motion_key: Option<String>,
|
|
pub asset_url: Option<String>,
|
|
pub generated_at_micros: i64,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
pub struct BigFishAssetSlotRecord {
|
|
pub slot_id: String,
|
|
pub asset_kind: String,
|
|
pub level: Option<u32>,
|
|
pub motion_key: Option<String>,
|
|
pub status: String,
|
|
pub asset_url: Option<String>,
|
|
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<String>,
|
|
}
|
|
|
|
#[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<BigFishGameDraftRecord>,
|
|
pub asset_slots: Vec<BigFishAssetSlotRecord>,
|
|
pub asset_coverage: BigFishAssetCoverageRecord,
|
|
pub messages: Vec<BigFishAgentMessageRecord>,
|
|
pub last_assistant_reply: Option<String>,
|
|
pub publish_ready: bool,
|
|
pub updated_at: String,
|
|
}
|