disint_model/interaction/
embed.rs

1use serde::Serialize;
2
3#[derive(Clone, Debug, Default, Serialize)]
4pub struct Embed {
5    pub title: Option<String>,
6    pub description: Option<String>,
7    pub url: Option<String>,
8    pub timestamp: Option<chrono::DateTime<chrono::Utc>>,
9    pub footer: Option<Footer>,
10    pub thumbnail: Option<Media>,
11    pub image: Option<Media>,
12    pub video: Option<Media>,
13    pub provider: Option<Provider>,
14    pub author: Option<Author>,
15    pub fields: Option<Vec<Field>>,
16}
17
18#[derive(Clone, Debug, Default, Serialize)]
19pub struct Footer {
20    pub text: String,
21    pub icon_url: Option<String>,
22    pub proxy_icon_url: Option<String>,
23}
24
25#[derive(Clone, Debug, Default, Serialize)]
26pub struct Media {
27    pub url: Option<String>,
28    pub proxy_url: Option<String>,
29    pub height: Option<u32>,
30    pub width: Option<u32>,
31}
32
33#[derive(Clone, Debug, Default, Serialize)]
34pub struct Provider {
35    pub name: Option<String>,
36    pub url: Option<String>,
37}
38
39#[derive(Clone, Debug, Default, Serialize)]
40pub struct Author {
41    pub name: Option<String>,
42    pub url: Option<String>,
43    pub icon_url: Option<String>,
44    pub proxy_icon_url: Option<String>,
45}
46
47#[derive(Clone, Debug, Serialize)]
48pub struct Field {
49    name: String,
50    value: String,
51    inline: Option<bool>,
52}
53
54impl Field {
55    pub fn new(name: impl Into<String>, value: impl Into<String>) -> Self {
56        Self {
57            name: name.into(),
58            value: value.into(),
59            inline: None,
60        }
61    }
62
63    pub fn new_inline(name: impl Into<String>, value: impl Into<String>) -> Self {
64        Self {
65            name: name.into(),
66            value: value.into(),
67            inline: Some(true),
68        }
69    }
70}