use serde::{Deserialize, Serialize}; /// 公开作品列表统一契约。 /// /// 该契约面向 BFF 和后续可选前端直连订阅,字段只包含平台公开卡片需要的摘要信息。 #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct PublicWorkGalleryEntryResponse { pub source_type: String, pub work_id: String, pub profile_id: String, #[serde(default)] pub source_session_id: Option, pub public_work_code: String, pub owner_user_id: String, pub author_display_name: String, pub world_name: String, pub subtitle: String, pub summary_text: String, #[serde(default)] pub cover_image_src: Option, #[serde(default)] pub cover_asset_id: Option, pub theme_tags: Vec, pub play_count: u32, pub remix_count: u32, pub like_count: u32, #[serde(default)] pub recent_play_count_7d: u32, #[serde(default)] pub published_at: Option, pub updated_at: String, pub sort_time_micros: i64, } /// 公开作品详情统一摘要契约。 /// /// `detail_payload_json` 只承载详情页展示扩展字段,不承载正式 runtime 配置。 #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct PublicWorkDetailEntryResponse { #[serde(flatten)] pub entry: PublicWorkGalleryEntryResponse, pub detail_payload_json: String, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct PublicWorkGalleryResponse { pub items: Vec, #[serde(default)] pub has_more: bool, #[serde(default)] pub next_cursor: Option, #[serde(default)] pub total_count: u32, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct PublicWorkDetailResponse { pub item: PublicWorkDetailEntryResponse, }