use serde::{Deserialize, Serialize}; /// A media item (image, video, etc.). /// Matches the `media` table schema. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Media { pub id: String, pub project_id: String, pub filename: String, pub original_name: String, pub mime_type: String, pub size: i64, #[serde(skip_serializing_if = "Option::is_none")] pub width: Option, #[serde(skip_serializing_if = "Option::is_none")] pub height: Option, #[serde(skip_serializing_if = "Option::is_none")] pub title: Option, #[serde(skip_serializing_if = "Option::is_none")] pub alt: Option, #[serde(skip_serializing_if = "Option::is_none")] pub caption: Option, #[serde(skip_serializing_if = "Option::is_none")] pub author: Option, #[serde(skip_serializing_if = "Option::is_none")] pub language: Option, pub file_path: String, pub sidecar_path: String, #[serde(skip_serializing_if = "Option::is_none")] pub checksum: Option, /// JSON-serialized string array in DB. #[serde(default)] pub tags: Vec, pub created_at: i64, pub updated_at: i64, } /// A translation of media metadata into another language. /// Matches the `media_translations` table. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct MediaTranslation { pub id: String, pub project_id: String, pub translation_for: String, pub language: String, #[serde(skip_serializing_if = "Option::is_none")] pub title: Option, #[serde(skip_serializing_if = "Option::is_none")] pub alt: Option, #[serde(skip_serializing_if = "Option::is_none")] pub caption: Option, pub created_at: i64, pub updated_at: i64, }