revolt_models/v0/
channel_webhooks.rs1#[cfg(feature = "validator")]
2use validator::Validate;
3
4use super::File;
5
6auto_derived_partial!(
7 pub struct Webhook {
9 pub id: String,
11
12 pub name: String,
14
15 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
17 pub avatar: Option<File>,
18
19 pub creator_id: String,
21
22 pub channel_id: String,
24
25 pub permissions: u64,
27
28 pub token: Option<String>,
30 },
31 "PartialWebhook"
32);
33
34auto_derived!(
35 pub struct MessageWebhook {
37 pub name: String,
39
40 pub avatar: Option<String>,
42 }
43
44 #[cfg_attr(feature = "validator", derive(validator::Validate))]
46 pub struct DataEditWebhook {
47 #[cfg_attr(feature = "validator", validate(length(min = 1, max = 32)))]
49 pub name: Option<String>,
50
51 #[cfg_attr(feature = "validator", validate(length(min = 1, max = 128)))]
53 pub avatar: Option<String>,
54
55 pub permissions: Option<u64>,
57
58 #[cfg_attr(feature = "serde", serde(default))]
60 pub remove: Vec<FieldsWebhook>,
61 }
62
63 pub struct ResponseWebhook {
65 pub id: String,
67
68 pub name: String,
70
71 pub avatar: Option<String>,
73
74 pub channel_id: String,
76
77 pub permissions: u64,
79 }
80
81 pub enum FieldsWebhook {
83 Avatar,
84 }
85
86 #[cfg_attr(feature = "validator", derive(Validate))]
88 pub struct CreateWebhookBody {
89 #[validate(length(min = 1, max = 32))]
90 pub name: String,
91
92 #[validate(length(min = 1, max = 128))]
93 pub avatar: Option<String>,
94 }
95);
96
97impl From<Webhook> for MessageWebhook {
98 fn from(value: Webhook) -> Self {
99 MessageWebhook {
100 name: value.name,
101 avatar: value.avatar.map(|file| file.id),
102 }
103 }
104}
105
106impl From<Webhook> for ResponseWebhook {
107 fn from(value: Webhook) -> Self {
108 ResponseWebhook {
109 id: value.id,
110 name: value.name,
111 avatar: value.avatar.map(|file| file.id),
112 channel_id: value.channel_id,
113 permissions: value.permissions,
114 }
115 }
116}