1pub mod v1;
6
7#[derive(PartialEq, Eq, Debug)]
9#[cfg_attr(
10 feature = "serde",
11 derive(serde::Serialize, serde::Deserialize),
12 serde(tag = "version")
13)]
14#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
15pub enum MailTask {
16 #[cfg_attr(feature = "serde", serde(rename = "1"))]
17 V1(v1::Message),
18}
19
20#[cfg(feature = "client")]
21impl MailTask {
22 pub fn registered_event_invite<E, I, U>(inviter: I, event: E, invitee: U) -> MailTask
24 where
25 I: Into<v1::RegisteredUser>,
26 E: Into<v1::Event>,
27 U: Into<v1::RegisteredUser>,
28 {
29 Self::V1(v1::Message::RegisteredEventInvite(
30 v1::RegisteredEventInvite {
31 invitee: invitee.into(),
32 event: event.into(),
33 inviter: inviter.into(),
34 },
35 ))
36 }
37
38 pub fn unregistered_event_invite<E, I, U>(inviter: I, event: E, invitee: U) -> MailTask
40 where
41 I: Into<v1::RegisteredUser>,
42 E: Into<v1::Event>,
43 U: Into<v1::UnregisteredUser>,
44 {
45 Self::V1(v1::Message::UnregisteredEventInvite(
46 v1::UnregisteredEventInvite {
47 invitee: invitee.into(),
48 event: event.into(),
49 inviter: inviter.into(),
50 },
51 ))
52 }
53
54 pub fn external_event_invite<E, I, U>(
56 inviter: I,
57 event: E,
58 invitee: U,
59 invite_code: String,
60 ) -> MailTask
61 where
62 I: Into<v1::RegisteredUser>,
63 E: Into<v1::Event>,
64 U: Into<v1::ExternalUser>,
65 {
66 Self::V1(v1::Message::ExternalEventInvite(v1::ExternalEventInvite {
67 invitee: invitee.into(),
68 event: event.into(),
69 inviter: inviter.into(),
70 invite_code,
71 }))
72 }
73
74 pub fn registered_event_update<E, EE, I, U>(
76 inviter: I,
77 event: E,
78 event_exception: Option<EE>,
79 invitee: U,
80 ) -> MailTask
81 where
82 I: Into<v1::RegisteredUser>,
83 E: Into<v1::Event>,
84 EE: Into<v1::EventException>,
85 U: Into<v1::RegisteredUser>,
86 {
87 Self::V1(v1::Message::RegisteredEventUpdate(
88 v1::RegisteredEventUpdate {
89 invitee: invitee.into(),
90 event: event.into(),
91 event_exception: event_exception.map(Into::into),
92 inviter: inviter.into(),
93 },
94 ))
95 }
96
97 pub fn unregistered_event_update<E, EE, I, U>(
99 inviter: I,
100 event: E,
101 event_exception: Option<EE>,
102 invitee: U,
103 ) -> MailTask
104 where
105 I: Into<v1::RegisteredUser>,
106 E: Into<v1::Event>,
107 EE: Into<v1::EventException>,
108 U: Into<v1::UnregisteredUser>,
109 {
110 Self::V1(v1::Message::UnregisteredEventUpdate(
111 v1::UnregisteredEventUpdate {
112 invitee: invitee.into(),
113 event: event.into(),
114 event_exception: event_exception.map(Into::into),
115 inviter: inviter.into(),
116 },
117 ))
118 }
119
120 pub fn external_event_update<E, EE, I, U>(
122 inviter: I,
123 event: E,
124 event_exception: Option<EE>,
125 invitee: U,
126 invite_code: String,
127 ) -> MailTask
128 where
129 I: Into<v1::RegisteredUser>,
130 E: Into<v1::Event>,
131 EE: Into<v1::EventException>,
132 U: Into<v1::ExternalUser>,
133 {
134 Self::V1(v1::Message::ExternalEventUpdate(v1::ExternalEventUpdate {
135 invitee: invitee.into(),
136 event: event.into(),
137 event_exception: event_exception.map(Into::into),
138 inviter: inviter.into(),
139 invite_code,
140 }))
141 }
142
143 pub fn registered_event_cancellation<E, I, U>(inviter: I, event: E, invitee: U) -> MailTask
145 where
146 I: Into<v1::RegisteredUser>,
147 E: Into<v1::Event>,
148 U: Into<v1::RegisteredUser>,
149 {
150 Self::V1(v1::Message::RegisteredEventCancellation(
151 v1::RegisteredEventCancellation {
152 invitee: invitee.into(),
153 event: event.into(),
154 inviter: inviter.into(),
155 },
156 ))
157 }
158
159 pub fn unregistered_event_cancellation<E, I, U>(inviter: I, event: E, invitee: U) -> MailTask
161 where
162 I: Into<v1::RegisteredUser>,
163 E: Into<v1::Event>,
164 U: Into<v1::UnregisteredUser>,
165 {
166 Self::V1(v1::Message::UnregisteredEventCancellation(
167 v1::UnregisteredEventCancellation {
168 invitee: invitee.into(),
169 event: event.into(),
170 inviter: inviter.into(),
171 },
172 ))
173 }
174
175 pub fn external_event_cancellation<E, I, U>(inviter: I, event: E, invitee: U) -> MailTask
177 where
178 I: Into<v1::RegisteredUser>,
179 E: Into<v1::Event>,
180 U: Into<v1::ExternalUser>,
181 {
182 Self::V1(v1::Message::ExternalEventCancellation(
183 v1::ExternalEventCancellation {
184 invitee: invitee.into(),
185 event: event.into(),
186 inviter: inviter.into(),
187 },
188 ))
189 }
190
191 pub fn registered_event_uninvite<E, I, U>(inviter: I, event: E, invitee: U) -> MailTask
193 where
194 I: Into<v1::RegisteredUser>,
195 E: Into<v1::Event>,
196 U: Into<v1::RegisteredUser>,
197 {
198 Self::V1(v1::Message::RegisteredEventUninvite(
199 v1::RegisteredEventUninvite {
200 invitee: invitee.into(),
201 event: event.into(),
202 inviter: inviter.into(),
203 },
204 ))
205 }
206
207 pub fn unregistered_event_uninvite<E, I, U>(inviter: I, event: E, invitee: U) -> MailTask
209 where
210 I: Into<v1::RegisteredUser>,
211 E: Into<v1::Event>,
212 U: Into<v1::UnregisteredUser>,
213 {
214 Self::V1(v1::Message::UnregisteredEventUninvite(
215 v1::UnregisteredEventUninvite {
216 invitee: invitee.into(),
217 event: event.into(),
218 inviter: inviter.into(),
219 },
220 ))
221 }
222
223 pub fn external_event_uninvite<E, I, U>(inviter: I, event: E, invitee: U) -> MailTask
225 where
226 I: Into<v1::RegisteredUser>,
227 E: Into<v1::Event>,
228 U: Into<v1::ExternalUser>,
229 {
230 Self::V1(v1::Message::ExternalEventUninvite(
231 v1::ExternalEventUninvite {
232 invitee: invitee.into(),
233 event: event.into(),
234 inviter: inviter.into(),
235 },
236 ))
237 }
238
239 pub fn as_kind_str(&self) -> &'static str {
240 match self {
241 MailTask::V1(message) => match message {
242 v1::Message::RegisteredEventInvite(_) => "registered_invite",
244 v1::Message::UnregisteredEventInvite(_) => "unregistered_invite",
245 v1::Message::ExternalEventInvite(_) => "external_invite",
246 v1::Message::RegisteredEventUpdate(_) => "registered_update",
248 v1::Message::UnregisteredEventUpdate(_) => "unregistered_update",
249 v1::Message::ExternalEventUpdate(_) => "external_update",
250 v1::Message::RegisteredEventCancellation(_) => "registered_cancellation",
252 v1::Message::UnregisteredEventCancellation(_) => "unregistered_cancellation",
253 v1::Message::ExternalEventCancellation(_) => "external_cancellation",
254 v1::Message::RegisteredEventUninvite(_) => "registered_uninvite",
256 v1::Message::UnregisteredEventUninvite(_) => "unregistered_uninvite",
257 v1::Message::ExternalEventUninvite(_) => "external_uninvite",
258 },
259 }
260 }
261}
262
263#[cfg(feature = "client")]
264impl From<String> for v1::ExternalUser {
265 fn from(email: String) -> Self {
266 Self {
267 email: email.into(),
268 }
269 }
270}
271
272#[cfg(feature = "client")]
273impl
274 From<(
275 chrono::DateTime<chrono::Utc>,
276 opentalk_types_common::time::TimeZone,
277 )> for v1::Time
278{
279 fn from(
280 (time, timezone): (
281 chrono::DateTime<chrono::Utc>,
282 opentalk_types_common::time::TimeZone,
283 ),
284 ) -> Self {
285 v1::Time {
286 time,
287 timezone: timezone.to_string(),
288 }
289 }
290}