summaryrefslogtreecommitdiffstats
path: root/src/entities/status.rs
blob: c65cb9ce076f6cdfcdb8a6e9f86019a7f4b36156 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//! Module containing all info relating to a status.

use super::prelude::*;
use crate::{
    entities::{card::Card, poll::Poll},
    status_builder::Visibility,
};
use chrono::prelude::*;
use serde::{Deserialize, Serialize};

/// A status from the instance.
#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct Status {
    /// The ID of the status.
    pub id: String,
    /// A Fediverse-unique resource ID.
    pub uri: String,
    /// The time the status was created.
    pub created_at: DateTime<Utc>,
    /// The Account which posted the status.
    pub account: Account,
    /// Body of the status; this will contain HTML
    /// (remote HTML already sanitized)
    pub content: String,
    /// The visibilty of the status.
    pub visibility: Visibility,
    /// Whether media attachments should be hidden by default.
    pub sensitive: bool,
    /// If not empty, warning text that should be displayed before the actual
    /// content.
    pub spoiler_text: String,
    /// An array of attachments.
    pub media_attachments: Vec<Attachment>,
    /// Name of application used to post status.
    pub application: Option<Application>,
    /// An array of mentions.
    pub mentions: Vec<Mention>,
    /// An array of tags.
    pub tags: Vec<Tag>,
    /// An array of Emoji
    pub emojis: Vec<Emoji>,
    /// The number of reblogs for the status.
    pub reblogs_count: u64,
    /// The number of favourites for the status.
    pub favourites_count: u64,
    /// The numbef or replies to this status.
    pub replies_count: Option<u64>,
    /// URL to the status page (can be remote)
    pub url: Option<String>,
    /// The ID of the status this status is replying to, if the status is
    /// a reply.
    pub in_reply_to_id: Option<String>,
    /// The ID of the account this status is replying to, if the status is
    /// a reply.
    pub in_reply_to_account_id: Option<String>,
    /// If this status is a reblogged Status of another User.
    pub reblog: Option<Box<Status>>,
    /// The poll attached to the status.
    pub poll: Option<Poll>,
    /// The associated card
    pub card: Option<Card>,
    /// The detected language for the status, if detected.
    pub language: Option<String>,
    /// Plain-text source of a status. Returned instead of content when status
    /// is deleted, so the user may redraft from the source text without the
    /// client having to reverse-engineer the original text from the HTML
    /// content.
    pub text: Option<String>,
    /// Whether the application client has favourited the status.
    pub favourited: Option<bool>,
    /// Whether the application client has reblogged the status.
    pub reblogged: Option<bool>,
    /// Have you muted notifications for this status's conversation?
    pub muted: Option<bool>,
    /// Have you bookmarked this status?
    pub bookmarked: Option<bool>,
    /// Whether this is the pinned status for the account that posted it.
    pub pinned: Option<bool>,
}

/// A mention of another user.
#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct Mention {
    /// URL of user's profile (can be remote).
    pub url: String,
    /// The username of the account.
    pub username: String,
    /// Equals `username` for local users, includes `@domain` for remote ones.
    pub acct: String,
    /// Account ID.
    pub id: String,
}

/// Struct representing an emoji within text.
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
pub struct Emoji {
    /// The shortcode of the emoji
    pub shortcode: String,
    /// URL to the emoji static image
    pub static_url: String,
    /// URL to the emoji image
    pub url: String,
}

/// Hashtags in the status.
#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct Tag {
    /// The hashtag, not including the preceding `#`.
    pub name: String,
    /// The URL of the hashtag.
    pub url: String,
    /// Usage statistics for given days.
    pub history: Option<Vec<History>>,
}

/// Represents daily usage history of a hashtag.
#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct History {
    /// UNIX timestamp on midnight of the given day.
    day: String,
    /// the counted usage of the tag within that day.
    uses: String,
    /// the total of accounts using the tag within that day.
    accounts: String,
}

/// Application details.
#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct Application {
    /// Name of the application.
    pub name: String,
    /// Homepage URL of the application.
    pub website: Option<String>,
}