mastodon_async_entities/
attachment.rs1use std::fmt::Display;
4
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
9pub struct Attachment {
10 pub id: AttachmentId,
12 #[serde(rename = "type")]
14 pub media_type: MediaType,
15 pub url: Option<String>,
17 pub remote_url: Option<String>,
19 pub preview_url: String,
21 pub text_url: Option<String>,
24 pub meta: Option<Meta>,
26 pub description: Option<String>,
28}
29
30impl Attachment {
31 pub fn is_done_processing(&self) -> bool {
39 self.url.is_some()
40 }
41}
42#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
44#[serde(transparent)]
45pub struct AttachmentId(String);
46
47impl AsRef<str> for AttachmentId {
48 fn as_ref(&self) -> &str {
49 &self.0
50 }
51}
52
53impl AttachmentId {
54 pub fn new(value: impl Into<String>) -> Self {
55 Self(value.into())
56 }
57}
58
59impl Display for AttachmentId {
60 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61 write!(f, "{}", self.0)
62 }
63}
64
65static_assertions::assert_not_impl_any!(
66 AttachmentId: PartialEq<crate::account::AccountId>,
67 PartialEq<crate::filter::FilterId>,
68 PartialEq<crate::list::ListId>,
69 PartialEq<crate::mention::MentionId>,
70 PartialEq<crate::notification::NotificationId>,
71 PartialEq<crate::relationship::RelationshipId>,
72 PartialEq<crate::report::ReportId>,
73 PartialEq<crate::push::SubscriptionId>,
74 PartialEq<crate::status::StatusId>,
75);
76
77#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
79pub struct Meta {
80 pub original: Option<ImageDetails>,
82 pub small: Option<ImageDetails>,
84}
85
86#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
88pub struct ImageDetails {
89 pub width: u64,
91 pub height: u64,
93 pub size: Option<String>,
95 pub aspect: Option<f64>,
97}
98
99#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
101pub enum MediaType {
102 #[serde(rename = "image")]
104 Image,
105 #[serde(rename = "video")]
107 Video,
108 #[serde(rename = "gifv")]
110 Gifv,
111 #[serde(rename = "unknown")]
113 Unknown,
114}
115
116#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
118pub struct ProcessedAttachment {
119 pub id: AttachmentId,
121 #[serde(rename = "type")]
123 pub media_type: MediaType,
124 pub url: String,
126 pub remote_url: Option<String>,
128 pub preview_url: String,
130 pub text_url: Option<String>,
133 pub meta: Option<Meta>,
135 pub description: Option<String>,
137}