mastodon_async_entities/
mention.rs

1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5/// Represents a `mention` used in a status
6#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
7pub struct Mention {
8    /// URL of user's profile (can be remote)
9    pub url: String,
10    /// The username of the account
11    pub username: String,
12    /// Equals username for local users, includes `@domain` for remote ones
13    pub acct: String,
14    /// Account ID
15    pub id: String,
16}
17
18/// Wrapper type for a mention ID string
19#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
20#[serde(transparent)]
21pub struct MentionId(String);
22
23impl AsRef<str> for MentionId {
24    fn as_ref(&self) -> &str {
25        &self.0
26    }
27}
28
29impl MentionId {
30    pub fn new(value: impl Into<String>) -> Self {
31        Self(value.into())
32    }
33}
34
35impl Display for MentionId {
36    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37        write!(f, "{}", self.0)
38    }
39}
40
41static_assertions::assert_not_impl_any!(
42    Mention: PartialEq<crate::account::AccountId>,
43    PartialEq<crate::attachment::AttachmentId>,
44    PartialEq<crate::filter::FilterId>,
45    PartialEq<crate::list::ListId>,
46    PartialEq<crate::notification::NotificationId>,
47    PartialEq<crate::relationship::RelationshipId>,
48    PartialEq<crate::push::SubscriptionId>,
49    PartialEq<crate::report::ReportId>,
50    PartialEq<crate::status::StatusId>,
51);