core_lib/notifications/
mod.rs

1use chrono::{DateTime, Utc};
2use serde::Serialize;
3
4pub mod sender;
5
6#[derive(Serialize, Debug)]
7pub struct DiscordField {
8    pub name: String,
9    pub value: String,
10    #[serde(default)]
11    pub inline: bool,
12}
13
14#[derive(Serialize, Debug)]
15pub struct DiscordImage {
16    pub url: String,
17}
18
19impl DiscordImage {
20    pub fn load(img: Option<String>) -> Option<Self> {
21        img.map(|i| DiscordImage { url: i })
22    }
23}
24
25#[derive(Serialize, Debug)]
26pub struct DiscordFooter {
27    pub text: String,
28}
29
30#[derive(Serialize, Debug)]
31pub struct DiscordEmbed {
32    pub title: String,
33    pub description: String,
34    pub color: u32,
35    #[serde(skip_serializing_if = "Vec::is_empty", default)]
36    pub fields: Vec<DiscordField>,
37    #[serde(skip_serializing_if = "Option::is_none", default)]
38    pub footer: Option<DiscordFooter>,
39    #[serde(skip_serializing_if = "Option::is_none", default)]
40    pub timestamp: Option<DateTime<Utc>>,
41    #[serde(skip_serializing_if = "Option::is_none", default)]
42    pub thumbnail: Option<DiscordImage>,
43}