Skip to main content

jacquard_api/tools_ozone/moderation/
emit_event.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: tools.ozone.moderation.emitEvent
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8#[allow(unused_imports)]
9use alloc::collections::BTreeMap;
10
11#[allow(unused_imports)]
12use core::marker::PhantomData;
13use jacquard_common::CowStr;
14use jacquard_common::types::string::{Did, Cid};
15use jacquard_derive::{IntoStatic, lexicon, open_union};
16use serde::{Serialize, Deserialize};
17use crate::com_atproto::admin::RepoRef;
18use crate::com_atproto::repo::strong_ref::StrongRef;
19use crate::tools_ozone::moderation::AccountEvent;
20use crate::tools_ozone::moderation::AgeAssuranceEvent;
21use crate::tools_ozone::moderation::AgeAssuranceOverrideEvent;
22use crate::tools_ozone::moderation::AgeAssurancePurgeEvent;
23use crate::tools_ozone::moderation::CancelScheduledTakedownEvent;
24use crate::tools_ozone::moderation::IdentityEvent;
25use crate::tools_ozone::moderation::ModEventAcknowledge;
26use crate::tools_ozone::moderation::ModEventComment;
27use crate::tools_ozone::moderation::ModEventDivert;
28use crate::tools_ozone::moderation::ModEventEmail;
29use crate::tools_ozone::moderation::ModEventEscalate;
30use crate::tools_ozone::moderation::ModEventLabel;
31use crate::tools_ozone::moderation::ModEventMute;
32use crate::tools_ozone::moderation::ModEventMuteReporter;
33use crate::tools_ozone::moderation::ModEventPriorityScore;
34use crate::tools_ozone::moderation::ModEventReport;
35use crate::tools_ozone::moderation::ModEventResolveAppeal;
36use crate::tools_ozone::moderation::ModEventReverseTakedown;
37use crate::tools_ozone::moderation::ModEventTag;
38use crate::tools_ozone::moderation::ModEventTakedown;
39use crate::tools_ozone::moderation::ModEventUnmute;
40use crate::tools_ozone::moderation::ModEventUnmuteReporter;
41use crate::tools_ozone::moderation::ModEventView;
42use crate::tools_ozone::moderation::ModTool;
43use crate::tools_ozone::moderation::RecordEvent;
44use crate::tools_ozone::moderation::RevokeAccountCredentialsEvent;
45use crate::tools_ozone::moderation::ScheduleTakedownEvent;
46
47#[lexicon]
48#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
49#[serde(rename_all = "camelCase")]
50pub struct EmitEvent<'a> {
51    #[serde(borrow)]
52    pub created_by: Did<'a>,
53    #[serde(borrow)]
54    pub event: EmitEventEvent<'a>,
55    ///An optional external ID for the event, used to deduplicate events from external systems. Fails when an event of same type with the same external ID exists for the same subject.
56    #[serde(skip_serializing_if = "Option::is_none")]
57    #[serde(borrow)]
58    pub external_id: Option<CowStr<'a>>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    #[serde(borrow)]
61    pub mod_tool: Option<ModTool<'a>>,
62    #[serde(borrow)]
63    pub subject: EmitEventSubject<'a>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    #[serde(borrow)]
66    pub subject_blob_cids: Option<Vec<Cid<'a>>>,
67}
68
69
70#[open_union]
71#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
72#[serde(tag = "$type", bound(deserialize = "'de: 'a"))]
73pub enum EmitEventEvent<'a> {
74    #[serde(rename = "tools.ozone.moderation.defs#modEventTakedown")]
75    ModEventTakedown(Box<ModEventTakedown<'a>>),
76    #[serde(rename = "tools.ozone.moderation.defs#modEventAcknowledge")]
77    ModEventAcknowledge(Box<ModEventAcknowledge<'a>>),
78    #[serde(rename = "tools.ozone.moderation.defs#modEventEscalate")]
79    ModEventEscalate(Box<ModEventEscalate<'a>>),
80    #[serde(rename = "tools.ozone.moderation.defs#modEventComment")]
81    ModEventComment(Box<ModEventComment<'a>>),
82    #[serde(rename = "tools.ozone.moderation.defs#modEventLabel")]
83    ModEventLabel(Box<ModEventLabel<'a>>),
84    #[serde(rename = "tools.ozone.moderation.defs#modEventReport")]
85    ModEventReport(Box<ModEventReport<'a>>),
86    #[serde(rename = "tools.ozone.moderation.defs#modEventMute")]
87    ModEventMute(Box<ModEventMute<'a>>),
88    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmute")]
89    ModEventUnmute(Box<ModEventUnmute<'a>>),
90    #[serde(rename = "tools.ozone.moderation.defs#modEventMuteReporter")]
91    ModEventMuteReporter(Box<ModEventMuteReporter<'a>>),
92    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmuteReporter")]
93    ModEventUnmuteReporter(Box<ModEventUnmuteReporter<'a>>),
94    #[serde(rename = "tools.ozone.moderation.defs#modEventReverseTakedown")]
95    ModEventReverseTakedown(Box<ModEventReverseTakedown<'a>>),
96    #[serde(rename = "tools.ozone.moderation.defs#modEventResolveAppeal")]
97    ModEventResolveAppeal(Box<ModEventResolveAppeal<'a>>),
98    #[serde(rename = "tools.ozone.moderation.defs#modEventEmail")]
99    ModEventEmail(Box<ModEventEmail<'a>>),
100    #[serde(rename = "tools.ozone.moderation.defs#modEventDivert")]
101    ModEventDivert(Box<ModEventDivert<'a>>),
102    #[serde(rename = "tools.ozone.moderation.defs#modEventTag")]
103    ModEventTag(Box<ModEventTag<'a>>),
104    #[serde(rename = "tools.ozone.moderation.defs#accountEvent")]
105    AccountEvent(Box<AccountEvent<'a>>),
106    #[serde(rename = "tools.ozone.moderation.defs#identityEvent")]
107    IdentityEvent(Box<IdentityEvent<'a>>),
108    #[serde(rename = "tools.ozone.moderation.defs#recordEvent")]
109    RecordEvent(Box<RecordEvent<'a>>),
110    #[serde(rename = "tools.ozone.moderation.defs#modEventPriorityScore")]
111    ModEventPriorityScore(Box<ModEventPriorityScore<'a>>),
112    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceEvent")]
113    AgeAssuranceEvent(Box<AgeAssuranceEvent<'a>>),
114    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent")]
115    AgeAssuranceOverrideEvent(Box<AgeAssuranceOverrideEvent<'a>>),
116    #[serde(rename = "tools.ozone.moderation.defs#ageAssurancePurgeEvent")]
117    AgeAssurancePurgeEvent(Box<AgeAssurancePurgeEvent<'a>>),
118    #[serde(rename = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent")]
119    RevokeAccountCredentialsEvent(Box<RevokeAccountCredentialsEvent<'a>>),
120    #[serde(rename = "tools.ozone.moderation.defs#scheduleTakedownEvent")]
121    ScheduleTakedownEvent(Box<ScheduleTakedownEvent<'a>>),
122    #[serde(rename = "tools.ozone.moderation.defs#cancelScheduledTakedownEvent")]
123    CancelScheduledTakedownEvent(Box<CancelScheduledTakedownEvent<'a>>),
124}
125
126
127#[open_union]
128#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
129#[serde(tag = "$type", bound(deserialize = "'de: 'a"))]
130pub enum EmitEventSubject<'a> {
131    #[serde(rename = "com.atproto.admin.defs#repoRef")]
132    RepoRef(Box<RepoRef<'a>>),
133    #[serde(rename = "com.atproto.repo.strongRef")]
134    StrongRef(Box<StrongRef<'a>>),
135}
136
137
138#[lexicon]
139#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
140#[serde(rename_all = "camelCase")]
141pub struct EmitEventOutput<'a> {
142    #[serde(flatten)]
143    #[serde(borrow)]
144    pub value: ModEventView<'a>,
145}
146
147
148#[open_union]
149#[derive(
150    Serialize,
151    Deserialize,
152    Debug,
153    Clone,
154    PartialEq,
155    Eq,
156    thiserror::Error,
157    miette::Diagnostic,
158    IntoStatic
159)]
160
161#[serde(tag = "error", content = "message")]
162#[serde(bound(deserialize = "'de: 'a"))]
163pub enum EmitEventError<'a> {
164    #[serde(rename = "SubjectHasAction")]
165    SubjectHasAction(Option<CowStr<'a>>),
166    /// An event with the same external ID already exists for the subject.
167    #[serde(rename = "DuplicateExternalId")]
168    DuplicateExternalId(Option<CowStr<'a>>),
169}
170
171impl core::fmt::Display for EmitEventError<'_> {
172    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
173        match self {
174            Self::SubjectHasAction(msg) => {
175                write!(f, "SubjectHasAction")?;
176                if let Some(msg) = msg {
177                    write!(f, ": {}", msg)?;
178                }
179                Ok(())
180            }
181            Self::DuplicateExternalId(msg) => {
182                write!(f, "DuplicateExternalId")?;
183                if let Some(msg) = msg {
184                    write!(f, ": {}", msg)?;
185                }
186                Ok(())
187            }
188            Self::Unknown(err) => write!(f, "Unknown error: {:?}", err),
189        }
190    }
191}
192
193/// Response type for tools.ozone.moderation.emitEvent
194pub struct EmitEventResponse;
195impl jacquard_common::xrpc::XrpcResp for EmitEventResponse {
196    const NSID: &'static str = "tools.ozone.moderation.emitEvent";
197    const ENCODING: &'static str = "application/json";
198    type Output<'de> = EmitEventOutput<'de>;
199    type Err<'de> = EmitEventError<'de>;
200}
201
202impl<'a> jacquard_common::xrpc::XrpcRequest for EmitEvent<'a> {
203    const NSID: &'static str = "tools.ozone.moderation.emitEvent";
204    const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
205        "application/json",
206    );
207    type Response = EmitEventResponse;
208}
209
210/// Endpoint type for tools.ozone.moderation.emitEvent
211pub struct EmitEventRequest;
212impl jacquard_common::xrpc::XrpcEndpoint for EmitEventRequest {
213    const PATH: &'static str = "/xrpc/tools.ozone.moderation.emitEvent";
214    const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
215        "application/json",
216    );
217    type Request<'de> = EmitEvent<'de>;
218    type Response = EmitEventResponse;
219}
220
221pub mod emit_event_state {
222
223    pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
224    #[allow(unused)]
225    use ::core::marker::PhantomData;
226    mod sealed {
227        pub trait Sealed {}
228    }
229    /// State trait tracking which required fields have been set
230    pub trait State: sealed::Sealed {
231        type Subject;
232        type Event;
233        type CreatedBy;
234    }
235    /// Empty state - all required fields are unset
236    pub struct Empty(());
237    impl sealed::Sealed for Empty {}
238    impl State for Empty {
239        type Subject = Unset;
240        type Event = Unset;
241        type CreatedBy = Unset;
242    }
243    ///State transition - sets the `subject` field to Set
244    pub struct SetSubject<S: State = Empty>(PhantomData<fn() -> S>);
245    impl<S: State> sealed::Sealed for SetSubject<S> {}
246    impl<S: State> State for SetSubject<S> {
247        type Subject = Set<members::subject>;
248        type Event = S::Event;
249        type CreatedBy = S::CreatedBy;
250    }
251    ///State transition - sets the `event` field to Set
252    pub struct SetEvent<S: State = Empty>(PhantomData<fn() -> S>);
253    impl<S: State> sealed::Sealed for SetEvent<S> {}
254    impl<S: State> State for SetEvent<S> {
255        type Subject = S::Subject;
256        type Event = Set<members::event>;
257        type CreatedBy = S::CreatedBy;
258    }
259    ///State transition - sets the `created_by` field to Set
260    pub struct SetCreatedBy<S: State = Empty>(PhantomData<fn() -> S>);
261    impl<S: State> sealed::Sealed for SetCreatedBy<S> {}
262    impl<S: State> State for SetCreatedBy<S> {
263        type Subject = S::Subject;
264        type Event = S::Event;
265        type CreatedBy = Set<members::created_by>;
266    }
267    /// Marker types for field names
268    #[allow(non_camel_case_types)]
269    pub mod members {
270        ///Marker type for the `subject` field
271        pub struct subject(());
272        ///Marker type for the `event` field
273        pub struct event(());
274        ///Marker type for the `created_by` field
275        pub struct created_by(());
276    }
277}
278
279/// Builder for constructing an instance of this type
280pub struct EmitEventBuilder<'a, S: emit_event_state::State> {
281    _state: PhantomData<fn() -> S>,
282    _fields: (
283        Option<Did<'a>>,
284        Option<EmitEventEvent<'a>>,
285        Option<CowStr<'a>>,
286        Option<ModTool<'a>>,
287        Option<EmitEventSubject<'a>>,
288        Option<Vec<Cid<'a>>>,
289    ),
290    _lifetime: PhantomData<&'a ()>,
291}
292
293impl<'a> EmitEvent<'a> {
294    /// Create a new builder for this type
295    pub fn new() -> EmitEventBuilder<'a, emit_event_state::Empty> {
296        EmitEventBuilder::new()
297    }
298}
299
300impl<'a> EmitEventBuilder<'a, emit_event_state::Empty> {
301    /// Create a new builder with all fields unset
302    pub fn new() -> Self {
303        EmitEventBuilder {
304            _state: PhantomData,
305            _fields: (None, None, None, None, None, None),
306            _lifetime: PhantomData,
307        }
308    }
309}
310
311impl<'a, S> EmitEventBuilder<'a, S>
312where
313    S: emit_event_state::State,
314    S::CreatedBy: emit_event_state::IsUnset,
315{
316    /// Set the `createdBy` field (required)
317    pub fn created_by(
318        mut self,
319        value: impl Into<Did<'a>>,
320    ) -> EmitEventBuilder<'a, emit_event_state::SetCreatedBy<S>> {
321        self._fields.0 = Option::Some(value.into());
322        EmitEventBuilder {
323            _state: PhantomData,
324            _fields: self._fields,
325            _lifetime: PhantomData,
326        }
327    }
328}
329
330impl<'a, S> EmitEventBuilder<'a, S>
331where
332    S: emit_event_state::State,
333    S::Event: emit_event_state::IsUnset,
334{
335    /// Set the `event` field (required)
336    pub fn event(
337        mut self,
338        value: impl Into<EmitEventEvent<'a>>,
339    ) -> EmitEventBuilder<'a, emit_event_state::SetEvent<S>> {
340        self._fields.1 = Option::Some(value.into());
341        EmitEventBuilder {
342            _state: PhantomData,
343            _fields: self._fields,
344            _lifetime: PhantomData,
345        }
346    }
347}
348
349impl<'a, S: emit_event_state::State> EmitEventBuilder<'a, S> {
350    /// Set the `externalId` field (optional)
351    pub fn external_id(mut self, value: impl Into<Option<CowStr<'a>>>) -> Self {
352        self._fields.2 = value.into();
353        self
354    }
355    /// Set the `externalId` field to an Option value (optional)
356    pub fn maybe_external_id(mut self, value: Option<CowStr<'a>>) -> Self {
357        self._fields.2 = value;
358        self
359    }
360}
361
362impl<'a, S: emit_event_state::State> EmitEventBuilder<'a, S> {
363    /// Set the `modTool` field (optional)
364    pub fn mod_tool(mut self, value: impl Into<Option<ModTool<'a>>>) -> Self {
365        self._fields.3 = value.into();
366        self
367    }
368    /// Set the `modTool` field to an Option value (optional)
369    pub fn maybe_mod_tool(mut self, value: Option<ModTool<'a>>) -> Self {
370        self._fields.3 = value;
371        self
372    }
373}
374
375impl<'a, S> EmitEventBuilder<'a, S>
376where
377    S: emit_event_state::State,
378    S::Subject: emit_event_state::IsUnset,
379{
380    /// Set the `subject` field (required)
381    pub fn subject(
382        mut self,
383        value: impl Into<EmitEventSubject<'a>>,
384    ) -> EmitEventBuilder<'a, emit_event_state::SetSubject<S>> {
385        self._fields.4 = Option::Some(value.into());
386        EmitEventBuilder {
387            _state: PhantomData,
388            _fields: self._fields,
389            _lifetime: PhantomData,
390        }
391    }
392}
393
394impl<'a, S: emit_event_state::State> EmitEventBuilder<'a, S> {
395    /// Set the `subjectBlobCids` field (optional)
396    pub fn subject_blob_cids(mut self, value: impl Into<Option<Vec<Cid<'a>>>>) -> Self {
397        self._fields.5 = value.into();
398        self
399    }
400    /// Set the `subjectBlobCids` field to an Option value (optional)
401    pub fn maybe_subject_blob_cids(mut self, value: Option<Vec<Cid<'a>>>) -> Self {
402        self._fields.5 = value;
403        self
404    }
405}
406
407impl<'a, S> EmitEventBuilder<'a, S>
408where
409    S: emit_event_state::State,
410    S::Subject: emit_event_state::IsSet,
411    S::Event: emit_event_state::IsSet,
412    S::CreatedBy: emit_event_state::IsSet,
413{
414    /// Build the final struct
415    pub fn build(self) -> EmitEvent<'a> {
416        EmitEvent {
417            created_by: self._fields.0.unwrap(),
418            event: self._fields.1.unwrap(),
419            external_id: self._fields.2,
420            mod_tool: self._fields.3,
421            subject: self._fields.4.unwrap(),
422            subject_blob_cids: self._fields.5,
423            extra_data: Default::default(),
424        }
425    }
426    /// Build the final struct with custom extra_data
427    pub fn build_with_data(
428        self,
429        extra_data: BTreeMap<
430            jacquard_common::deps::smol_str::SmolStr,
431            jacquard_common::types::value::Data<'a>,
432        >,
433    ) -> EmitEvent<'a> {
434        EmitEvent {
435            created_by: self._fields.0.unwrap(),
436            event: self._fields.1.unwrap(),
437            external_id: self._fields.2,
438            mod_tool: self._fields.3,
439            subject: self._fields.4.unwrap(),
440            subject_blob_cids: self._fields.5,
441            extra_data: Some(extra_data),
442        }
443    }
444}