use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; use crate::mastodon_api::accounts::types::Account; use crate::mastodon_api::media::types::Attachment; use crate::models::posts::types::{Post, PostCreateData}; /// https://docs.joinmastodon.org/entities/status/ #[derive(Serialize)] pub struct Status { pub id: Uuid, pub created_at: DateTime, pub account: Account, pub content: String, pub media_attachments: Vec, // Extra fields pub ipfs_cid: Option, pub token_id: Option, pub token_tx_id: Option, } impl Status { pub fn from_post(post: Post, instance_url: &str) -> Self { let attachments: Vec = post.attachments.into_iter() .map(|item| Attachment::from_db(item, instance_url)) .collect(); let account = Account::from_profile(post.author, instance_url); Self { id: post.id, created_at: post.created_at, account: account, content: post.content, media_attachments: attachments, ipfs_cid: post.ipfs_cid, token_id: post.token_id, token_tx_id: post.token_tx_id, } } } /// https://docs.joinmastodon.org/methods/statuses/ #[derive(Deserialize)] pub struct StatusData { pub status: String, #[serde(rename = "media_ids[]")] pub media_ids: Option>, } impl From for PostCreateData { fn from(value: StatusData) -> Self { Self { content: value.status, attachments: value.media_ids.unwrap_or(vec![]), created_at: None, } } }