disint_model/interaction/
embed.rs1use 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}