jacquard_api/tools_ozone/
moderation.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: tools.ozone.moderation.defs
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8pub mod cancel_scheduled_actions;
9pub mod emit_event;
10pub mod get_account_timeline;
11pub mod get_event;
12pub mod get_record;
13pub mod get_records;
14pub mod get_repo;
15pub mod get_reporter_stats;
16pub mod get_repos;
17pub mod get_subjects;
18pub mod list_scheduled_actions;
19pub mod query_events;
20pub mod query_statuses;
21pub mod schedule_action;
22pub mod search_repos;
23
24/// Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
25#[jacquard_derive::lexicon]
26#[derive(
27    serde::Serialize,
28    serde::Deserialize,
29    Debug,
30    Clone,
31    PartialEq,
32    Eq,
33    jacquard_derive::IntoStatic,
34    bon::Builder
35)]
36#[serde(rename_all = "camelCase")]
37pub struct AccountEvent<'a> {
38    /// Indicates that the account has a repository which can be fetched from the host that emitted this event.
39    pub active: bool,
40    #[serde(skip_serializing_if = "std::option::Option::is_none")]
41    #[builder(into)]
42    #[serde(borrow)]
43    pub comment: Option<jacquard_common::CowStr<'a>>,
44    #[serde(skip_serializing_if = "std::option::Option::is_none")]
45    #[builder(into)]
46    #[serde(borrow)]
47    pub status: Option<jacquard_common::CowStr<'a>>,
48    pub timestamp: jacquard_common::types::string::Datetime,
49}
50
51#[jacquard_derive::lexicon]
52#[derive(
53    serde::Serialize,
54    serde::Deserialize,
55    Debug,
56    Clone,
57    PartialEq,
58    Eq,
59    jacquard_derive::IntoStatic,
60    Default
61)]
62#[serde(rename_all = "camelCase")]
63pub struct AccountHosting<'a> {
64    #[serde(skip_serializing_if = "std::option::Option::is_none")]
65    pub created_at: std::option::Option<jacquard_common::types::string::Datetime>,
66    #[serde(skip_serializing_if = "std::option::Option::is_none")]
67    pub deactivated_at: std::option::Option<jacquard_common::types::string::Datetime>,
68    #[serde(skip_serializing_if = "std::option::Option::is_none")]
69    pub deleted_at: std::option::Option<jacquard_common::types::string::Datetime>,
70    #[serde(skip_serializing_if = "std::option::Option::is_none")]
71    pub reactivated_at: std::option::Option<jacquard_common::types::string::Datetime>,
72    #[serde(borrow)]
73    pub status: jacquard_common::CowStr<'a>,
74    #[serde(skip_serializing_if = "std::option::Option::is_none")]
75    pub updated_at: std::option::Option<jacquard_common::types::string::Datetime>,
76}
77
78/// Statistics about a particular account subject
79#[jacquard_derive::lexicon]
80#[derive(
81    serde::Serialize,
82    serde::Deserialize,
83    Debug,
84    Clone,
85    PartialEq,
86    Eq,
87    jacquard_derive::IntoStatic,
88    Default
89)]
90#[serde(rename_all = "camelCase")]
91pub struct AccountStats<'a> {
92    /// Total number of appeals against a moderation action on the account
93    #[serde(skip_serializing_if = "std::option::Option::is_none")]
94    pub appeal_count: std::option::Option<i64>,
95    /// Number of times the account was escalated
96    #[serde(skip_serializing_if = "std::option::Option::is_none")]
97    pub escalate_count: std::option::Option<i64>,
98    /// Total number of reports on the account
99    #[serde(skip_serializing_if = "std::option::Option::is_none")]
100    pub report_count: std::option::Option<i64>,
101    /// Number of times the account was suspended
102    #[serde(skip_serializing_if = "std::option::Option::is_none")]
103    pub suspend_count: std::option::Option<i64>,
104    /// Number of times the account was taken down
105    #[serde(skip_serializing_if = "std::option::Option::is_none")]
106    pub takedown_count: std::option::Option<i64>,
107}
108
109/// Age assurance info coming directly from users. Only works on DID subjects.
110#[jacquard_derive::lexicon]
111#[derive(
112    serde::Serialize,
113    serde::Deserialize,
114    Debug,
115    Clone,
116    PartialEq,
117    Eq,
118    jacquard_derive::IntoStatic,
119    bon::Builder
120)]
121#[serde(rename_all = "camelCase")]
122pub struct AgeAssuranceEvent<'a> {
123    /// The unique identifier for this instance of the age assurance flow, in UUID format.
124    #[serde(borrow)]
125    #[builder(into)]
126    pub attempt_id: jacquard_common::CowStr<'a>,
127    /// The IP address used when completing the AA flow.
128    #[serde(skip_serializing_if = "std::option::Option::is_none")]
129    #[builder(into)]
130    #[serde(borrow)]
131    pub complete_ip: Option<jacquard_common::CowStr<'a>>,
132    /// The user agent used when completing the AA flow.
133    #[serde(skip_serializing_if = "std::option::Option::is_none")]
134    #[builder(into)]
135    #[serde(borrow)]
136    pub complete_ua: Option<jacquard_common::CowStr<'a>>,
137    /// The date and time of this write operation.
138    pub created_at: jacquard_common::types::string::Datetime,
139    /// The IP address used when initiating the AA flow.
140    #[serde(skip_serializing_if = "std::option::Option::is_none")]
141    #[builder(into)]
142    #[serde(borrow)]
143    pub init_ip: Option<jacquard_common::CowStr<'a>>,
144    /// The user agent used when initiating the AA flow.
145    #[serde(skip_serializing_if = "std::option::Option::is_none")]
146    #[builder(into)]
147    #[serde(borrow)]
148    pub init_ua: Option<jacquard_common::CowStr<'a>>,
149    /// The status of the age assurance process.
150    #[serde(borrow)]
151    #[builder(into)]
152    pub status: jacquard_common::CowStr<'a>,
153}
154
155/// Age assurance status override by moderators. Only works on DID subjects.
156#[jacquard_derive::lexicon]
157#[derive(
158    serde::Serialize,
159    serde::Deserialize,
160    Debug,
161    Clone,
162    PartialEq,
163    Eq,
164    jacquard_derive::IntoStatic,
165    Default
166)]
167#[serde(rename_all = "camelCase")]
168pub struct AgeAssuranceOverrideEvent<'a> {
169    /// Comment describing the reason for the override.
170    #[serde(borrow)]
171    pub comment: jacquard_common::CowStr<'a>,
172    /// The status to be set for the user decided by a moderator, overriding whatever value the user had previously. Use reset to default to original state.
173    #[serde(borrow)]
174    pub status: jacquard_common::CowStr<'a>,
175}
176
177#[jacquard_derive::lexicon]
178#[derive(
179    serde::Serialize,
180    serde::Deserialize,
181    Debug,
182    Clone,
183    PartialEq,
184    Eq,
185    jacquard_derive::IntoStatic,
186    bon::Builder
187)]
188#[serde(rename_all = "camelCase")]
189pub struct BlobView<'a> {
190    #[serde(borrow)]
191    pub cid: jacquard_common::types::string::Cid<'a>,
192    pub created_at: jacquard_common::types::string::Datetime,
193    #[serde(skip_serializing_if = "std::option::Option::is_none")]
194    #[builder(into)]
195    #[serde(borrow)]
196    pub details: Option<BlobViewDetails<'a>>,
197    #[serde(borrow)]
198    #[builder(into)]
199    pub mime_type: jacquard_common::CowStr<'a>,
200    #[serde(skip_serializing_if = "std::option::Option::is_none")]
201    #[builder(into)]
202    #[serde(borrow)]
203    pub moderation: Option<crate::tools_ozone::moderation::Moderation<'a>>,
204    pub size: i64,
205}
206
207#[jacquard_derive::open_union]
208#[derive(
209    serde::Serialize,
210    serde::Deserialize,
211    Debug,
212    Clone,
213    PartialEq,
214    Eq,
215    jacquard_derive::IntoStatic
216)]
217#[serde(tag = "$type")]
218#[serde(bound(deserialize = "'de: 'a"))]
219pub enum BlobViewDetails<'a> {
220    #[serde(rename = "tools.ozone.moderation.defs#imageDetails")]
221    ImageDetails(Box<crate::tools_ozone::moderation::ImageDetails<'a>>),
222    #[serde(rename = "tools.ozone.moderation.defs#videoDetails")]
223    VideoDetails(Box<crate::tools_ozone::moderation::VideoDetails<'a>>),
224}
225
226/// Logs cancellation of a scheduled takedown action for an account.
227#[jacquard_derive::lexicon]
228#[derive(
229    serde::Serialize,
230    serde::Deserialize,
231    Debug,
232    Clone,
233    PartialEq,
234    Eq,
235    jacquard_derive::IntoStatic,
236    Default
237)]
238#[serde(rename_all = "camelCase")]
239pub struct CancelScheduledTakedownEvent<'a> {
240    #[serde(skip_serializing_if = "std::option::Option::is_none")]
241    #[serde(borrow)]
242    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
243}
244
245/// Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
246#[jacquard_derive::lexicon]
247#[derive(
248    serde::Serialize,
249    serde::Deserialize,
250    Debug,
251    Clone,
252    PartialEq,
253    Eq,
254    jacquard_derive::IntoStatic,
255    bon::Builder
256)]
257#[serde(rename_all = "camelCase")]
258pub struct IdentityEvent<'a> {
259    #[serde(skip_serializing_if = "std::option::Option::is_none")]
260    #[builder(into)]
261    #[serde(borrow)]
262    pub comment: Option<jacquard_common::CowStr<'a>>,
263    #[serde(skip_serializing_if = "std::option::Option::is_none")]
264    #[builder(into)]
265    #[serde(borrow)]
266    pub handle: Option<jacquard_common::types::string::Handle<'a>>,
267    #[serde(skip_serializing_if = "std::option::Option::is_none")]
268    #[builder(into)]
269    #[serde(borrow)]
270    pub pds_host: Option<jacquard_common::types::string::Uri<'a>>,
271    pub timestamp: jacquard_common::types::string::Datetime,
272    #[serde(skip_serializing_if = "std::option::Option::is_none")]
273    #[builder(into)]
274    pub tombstone: Option<bool>,
275}
276
277#[jacquard_derive::lexicon]
278#[derive(
279    serde::Serialize,
280    serde::Deserialize,
281    Debug,
282    Clone,
283    PartialEq,
284    Eq,
285    jacquard_derive::IntoStatic,
286    bon::Builder
287)]
288#[serde(rename_all = "camelCase")]
289pub struct ImageDetails<'a> {
290    pub height: i64,
291    pub width: i64,
292}
293
294#[jacquard_derive::lexicon]
295#[derive(
296    serde::Serialize,
297    serde::Deserialize,
298    Debug,
299    Clone,
300    PartialEq,
301    Eq,
302    jacquard_derive::IntoStatic,
303    Default
304)]
305#[serde(rename_all = "camelCase")]
306pub struct ModEventAcknowledge<'a> {
307    /// If true, all other reports on content authored by this account will be resolved (acknowledged).
308    #[serde(skip_serializing_if = "std::option::Option::is_none")]
309    pub acknowledge_account_subjects: std::option::Option<bool>,
310    #[serde(skip_serializing_if = "std::option::Option::is_none")]
311    #[serde(borrow)]
312    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
313}
314
315/// Add a comment to a subject. An empty comment will clear any previously set sticky comment.
316#[jacquard_derive::lexicon]
317#[derive(
318    serde::Serialize,
319    serde::Deserialize,
320    Debug,
321    Clone,
322    PartialEq,
323    Eq,
324    jacquard_derive::IntoStatic,
325    Default
326)]
327#[serde(rename_all = "camelCase")]
328pub struct ModEventComment<'a> {
329    #[serde(skip_serializing_if = "std::option::Option::is_none")]
330    #[serde(borrow)]
331    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
332    /// Make the comment persistent on the subject
333    #[serde(skip_serializing_if = "std::option::Option::is_none")]
334    pub sticky: std::option::Option<bool>,
335}
336
337/// Divert a record's blobs to a 3rd party service for further scanning/tagging
338#[jacquard_derive::lexicon]
339#[derive(
340    serde::Serialize,
341    serde::Deserialize,
342    Debug,
343    Clone,
344    PartialEq,
345    Eq,
346    jacquard_derive::IntoStatic,
347    Default
348)]
349#[serde(rename_all = "camelCase")]
350pub struct ModEventDivert<'a> {
351    #[serde(skip_serializing_if = "std::option::Option::is_none")]
352    #[serde(borrow)]
353    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
354}
355
356/// Keep a log of outgoing email to a user
357#[jacquard_derive::lexicon]
358#[derive(
359    serde::Serialize,
360    serde::Deserialize,
361    Debug,
362    Clone,
363    PartialEq,
364    Eq,
365    jacquard_derive::IntoStatic,
366    Default
367)]
368#[serde(rename_all = "camelCase")]
369pub struct ModEventEmail<'a> {
370    /// Additional comment about the outgoing comm.
371    #[serde(skip_serializing_if = "std::option::Option::is_none")]
372    #[serde(borrow)]
373    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
374    /// The content of the email sent to the user.
375    #[serde(skip_serializing_if = "std::option::Option::is_none")]
376    #[serde(borrow)]
377    pub content: std::option::Option<jacquard_common::CowStr<'a>>,
378    /// The subject line of the email sent to the user.
379    #[serde(borrow)]
380    pub subject_line: jacquard_common::CowStr<'a>,
381}
382
383#[jacquard_derive::lexicon]
384#[derive(
385    serde::Serialize,
386    serde::Deserialize,
387    Debug,
388    Clone,
389    PartialEq,
390    Eq,
391    jacquard_derive::IntoStatic,
392    Default
393)]
394#[serde(rename_all = "camelCase")]
395pub struct ModEventEscalate<'a> {
396    #[serde(skip_serializing_if = "std::option::Option::is_none")]
397    #[serde(borrow)]
398    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
399}
400
401/// Apply/Negate labels on a subject
402#[jacquard_derive::lexicon]
403#[derive(
404    serde::Serialize,
405    serde::Deserialize,
406    Debug,
407    Clone,
408    PartialEq,
409    Eq,
410    jacquard_derive::IntoStatic,
411    bon::Builder
412)]
413#[serde(rename_all = "camelCase")]
414pub struct ModEventLabel<'a> {
415    #[serde(skip_serializing_if = "std::option::Option::is_none")]
416    #[builder(into)]
417    #[serde(borrow)]
418    pub comment: Option<jacquard_common::CowStr<'a>>,
419    #[serde(borrow)]
420    pub create_label_vals: Vec<jacquard_common::CowStr<'a>>,
421    /// Indicates how long the label will remain on the subject. Only applies on labels that are being added.
422    #[serde(skip_serializing_if = "std::option::Option::is_none")]
423    #[builder(into)]
424    pub duration_in_hours: Option<i64>,
425    #[serde(borrow)]
426    pub negate_label_vals: Vec<jacquard_common::CowStr<'a>>,
427}
428
429/// Mute incoming reports on a subject
430#[jacquard_derive::lexicon]
431#[derive(
432    serde::Serialize,
433    serde::Deserialize,
434    Debug,
435    Clone,
436    PartialEq,
437    Eq,
438    jacquard_derive::IntoStatic,
439    bon::Builder
440)]
441#[serde(rename_all = "camelCase")]
442pub struct ModEventMute<'a> {
443    #[serde(skip_serializing_if = "std::option::Option::is_none")]
444    #[builder(into)]
445    #[serde(borrow)]
446    pub comment: Option<jacquard_common::CowStr<'a>>,
447    /// Indicates how long the subject should remain muted.
448    pub duration_in_hours: i64,
449}
450
451/// Mute incoming reports from an account
452#[jacquard_derive::lexicon]
453#[derive(
454    serde::Serialize,
455    serde::Deserialize,
456    Debug,
457    Clone,
458    PartialEq,
459    Eq,
460    jacquard_derive::IntoStatic,
461    Default
462)]
463#[serde(rename_all = "camelCase")]
464pub struct ModEventMuteReporter<'a> {
465    #[serde(skip_serializing_if = "std::option::Option::is_none")]
466    #[serde(borrow)]
467    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
468    /// Indicates how long the account should remain muted. Falsy value here means a permanent mute.
469    #[serde(skip_serializing_if = "std::option::Option::is_none")]
470    pub duration_in_hours: std::option::Option<i64>,
471}
472
473/// Set priority score of the subject. Higher score means higher priority.
474#[jacquard_derive::lexicon]
475#[derive(
476    serde::Serialize,
477    serde::Deserialize,
478    Debug,
479    Clone,
480    PartialEq,
481    Eq,
482    jacquard_derive::IntoStatic,
483    bon::Builder
484)]
485#[serde(rename_all = "camelCase")]
486pub struct ModEventPriorityScore<'a> {
487    #[serde(skip_serializing_if = "std::option::Option::is_none")]
488    #[builder(into)]
489    #[serde(borrow)]
490    pub comment: Option<jacquard_common::CowStr<'a>>,
491    pub score: i64,
492}
493
494/// Report a subject
495#[jacquard_derive::lexicon]
496#[derive(
497    serde::Serialize,
498    serde::Deserialize,
499    Debug,
500    Clone,
501    PartialEq,
502    Eq,
503    jacquard_derive::IntoStatic,
504    bon::Builder
505)]
506#[serde(rename_all = "camelCase")]
507pub struct ModEventReport<'a> {
508    #[serde(skip_serializing_if = "std::option::Option::is_none")]
509    #[builder(into)]
510    #[serde(borrow)]
511    pub comment: Option<jacquard_common::CowStr<'a>>,
512    /// Set to true if the reporter was muted from reporting at the time of the event. These reports won't impact the reviewState of the subject.
513    #[serde(skip_serializing_if = "std::option::Option::is_none")]
514    #[builder(into)]
515    pub is_reporter_muted: Option<bool>,
516    #[serde(borrow)]
517    pub report_type: crate::com_atproto::moderation::ReasonType<'a>,
518}
519
520/// Resolve appeal on a subject
521#[jacquard_derive::lexicon]
522#[derive(
523    serde::Serialize,
524    serde::Deserialize,
525    Debug,
526    Clone,
527    PartialEq,
528    Eq,
529    jacquard_derive::IntoStatic,
530    Default
531)]
532#[serde(rename_all = "camelCase")]
533pub struct ModEventResolveAppeal<'a> {
534    /// Describe resolution.
535    #[serde(skip_serializing_if = "std::option::Option::is_none")]
536    #[serde(borrow)]
537    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
538}
539
540/// Revert take down action on a subject
541#[jacquard_derive::lexicon]
542#[derive(
543    serde::Serialize,
544    serde::Deserialize,
545    Debug,
546    Clone,
547    PartialEq,
548    Eq,
549    jacquard_derive::IntoStatic,
550    Default
551)]
552#[serde(rename_all = "camelCase")]
553pub struct ModEventReverseTakedown<'a> {
554    /// Describe reasoning behind the reversal.
555    #[serde(skip_serializing_if = "std::option::Option::is_none")]
556    #[serde(borrow)]
557    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
558}
559
560/// Add/Remove a tag on a subject
561#[jacquard_derive::lexicon]
562#[derive(
563    serde::Serialize,
564    serde::Deserialize,
565    Debug,
566    Clone,
567    PartialEq,
568    Eq,
569    jacquard_derive::IntoStatic,
570    bon::Builder
571)]
572#[serde(rename_all = "camelCase")]
573pub struct ModEventTag<'a> {
574    /// Tags to be added to the subject. If already exists, won't be duplicated.
575    #[serde(borrow)]
576    pub add: Vec<jacquard_common::CowStr<'a>>,
577    /// Additional comment about added/removed tags.
578    #[serde(skip_serializing_if = "std::option::Option::is_none")]
579    #[builder(into)]
580    #[serde(borrow)]
581    pub comment: Option<jacquard_common::CowStr<'a>>,
582    /// Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated.
583    #[serde(borrow)]
584    pub remove: Vec<jacquard_common::CowStr<'a>>,
585}
586
587/// Take down a subject permanently or temporarily
588#[jacquard_derive::lexicon]
589#[derive(
590    serde::Serialize,
591    serde::Deserialize,
592    Debug,
593    Clone,
594    PartialEq,
595    Eq,
596    jacquard_derive::IntoStatic,
597    Default
598)]
599#[serde(rename_all = "camelCase")]
600pub struct ModEventTakedown<'a> {
601    /// If true, all other reports on content authored by this account will be resolved (acknowledged).
602    #[serde(skip_serializing_if = "std::option::Option::is_none")]
603    pub acknowledge_account_subjects: std::option::Option<bool>,
604    #[serde(skip_serializing_if = "std::option::Option::is_none")]
605    #[serde(borrow)]
606    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
607    /// Indicates how long the takedown should be in effect before automatically expiring.
608    #[serde(skip_serializing_if = "std::option::Option::is_none")]
609    pub duration_in_hours: std::option::Option<i64>,
610    /// Names/Keywords of the policies that drove the decision.
611    #[serde(skip_serializing_if = "std::option::Option::is_none")]
612    #[serde(borrow)]
613    pub policies: std::option::Option<Vec<jacquard_common::CowStr<'a>>>,
614}
615
616/// Unmute action on a subject
617#[jacquard_derive::lexicon]
618#[derive(
619    serde::Serialize,
620    serde::Deserialize,
621    Debug,
622    Clone,
623    PartialEq,
624    Eq,
625    jacquard_derive::IntoStatic,
626    Default
627)]
628#[serde(rename_all = "camelCase")]
629pub struct ModEventUnmute<'a> {
630    /// Describe reasoning behind the reversal.
631    #[serde(skip_serializing_if = "std::option::Option::is_none")]
632    #[serde(borrow)]
633    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
634}
635
636/// Unmute incoming reports from an account
637#[jacquard_derive::lexicon]
638#[derive(
639    serde::Serialize,
640    serde::Deserialize,
641    Debug,
642    Clone,
643    PartialEq,
644    Eq,
645    jacquard_derive::IntoStatic,
646    Default
647)]
648#[serde(rename_all = "camelCase")]
649pub struct ModEventUnmuteReporter<'a> {
650    /// Describe reasoning behind the reversal.
651    #[serde(skip_serializing_if = "std::option::Option::is_none")]
652    #[serde(borrow)]
653    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
654}
655
656#[jacquard_derive::lexicon]
657#[derive(
658    serde::Serialize,
659    serde::Deserialize,
660    Debug,
661    Clone,
662    PartialEq,
663    Eq,
664    jacquard_derive::IntoStatic,
665    bon::Builder
666)]
667#[serde(rename_all = "camelCase")]
668pub struct ModEventView<'a> {
669    pub created_at: jacquard_common::types::string::Datetime,
670    #[serde(borrow)]
671    pub created_by: jacquard_common::types::string::Did<'a>,
672    #[serde(skip_serializing_if = "std::option::Option::is_none")]
673    #[builder(into)]
674    #[serde(borrow)]
675    pub creator_handle: Option<jacquard_common::CowStr<'a>>,
676    #[serde(borrow)]
677    pub event: ModEventViewEvent<'a>,
678    pub id: i64,
679    #[serde(skip_serializing_if = "std::option::Option::is_none")]
680    #[builder(into)]
681    #[serde(borrow)]
682    pub mod_tool: Option<crate::tools_ozone::moderation::ModTool<'a>>,
683    #[serde(borrow)]
684    pub subject: ModEventViewSubject<'a>,
685    #[serde(borrow)]
686    pub subject_blob_cids: Vec<jacquard_common::CowStr<'a>>,
687    #[serde(skip_serializing_if = "std::option::Option::is_none")]
688    #[builder(into)]
689    #[serde(borrow)]
690    pub subject_handle: Option<jacquard_common::CowStr<'a>>,
691}
692
693#[jacquard_derive::open_union]
694#[derive(
695    serde::Serialize,
696    serde::Deserialize,
697    Debug,
698    Clone,
699    PartialEq,
700    Eq,
701    jacquard_derive::IntoStatic
702)]
703#[serde(tag = "$type")]
704#[serde(bound(deserialize = "'de: 'a"))]
705pub enum ModEventViewEvent<'a> {
706    #[serde(rename = "tools.ozone.moderation.defs#modEventTakedown")]
707    ModEventTakedown(Box<crate::tools_ozone::moderation::ModEventTakedown<'a>>),
708    #[serde(rename = "tools.ozone.moderation.defs#modEventReverseTakedown")]
709    ModEventReverseTakedown(
710        Box<crate::tools_ozone::moderation::ModEventReverseTakedown<'a>>,
711    ),
712    #[serde(rename = "tools.ozone.moderation.defs#modEventComment")]
713    ModEventComment(Box<crate::tools_ozone::moderation::ModEventComment<'a>>),
714    #[serde(rename = "tools.ozone.moderation.defs#modEventReport")]
715    ModEventReport(Box<crate::tools_ozone::moderation::ModEventReport<'a>>),
716    #[serde(rename = "tools.ozone.moderation.defs#modEventLabel")]
717    ModEventLabel(Box<crate::tools_ozone::moderation::ModEventLabel<'a>>),
718    #[serde(rename = "tools.ozone.moderation.defs#modEventAcknowledge")]
719    ModEventAcknowledge(Box<crate::tools_ozone::moderation::ModEventAcknowledge<'a>>),
720    #[serde(rename = "tools.ozone.moderation.defs#modEventEscalate")]
721    ModEventEscalate(Box<crate::tools_ozone::moderation::ModEventEscalate<'a>>),
722    #[serde(rename = "tools.ozone.moderation.defs#modEventMute")]
723    ModEventMute(Box<crate::tools_ozone::moderation::ModEventMute<'a>>),
724    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmute")]
725    ModEventUnmute(Box<crate::tools_ozone::moderation::ModEventUnmute<'a>>),
726    #[serde(rename = "tools.ozone.moderation.defs#modEventMuteReporter")]
727    ModEventMuteReporter(Box<crate::tools_ozone::moderation::ModEventMuteReporter<'a>>),
728    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmuteReporter")]
729    ModEventUnmuteReporter(
730        Box<crate::tools_ozone::moderation::ModEventUnmuteReporter<'a>>,
731    ),
732    #[serde(rename = "tools.ozone.moderation.defs#modEventEmail")]
733    ModEventEmail(Box<crate::tools_ozone::moderation::ModEventEmail<'a>>),
734    #[serde(rename = "tools.ozone.moderation.defs#modEventResolveAppeal")]
735    ModEventResolveAppeal(
736        Box<crate::tools_ozone::moderation::ModEventResolveAppeal<'a>>,
737    ),
738    #[serde(rename = "tools.ozone.moderation.defs#modEventDivert")]
739    ModEventDivert(Box<crate::tools_ozone::moderation::ModEventDivert<'a>>),
740    #[serde(rename = "tools.ozone.moderation.defs#modEventTag")]
741    ModEventTag(Box<crate::tools_ozone::moderation::ModEventTag<'a>>),
742    #[serde(rename = "tools.ozone.moderation.defs#accountEvent")]
743    AccountEvent(Box<crate::tools_ozone::moderation::AccountEvent<'a>>),
744    #[serde(rename = "tools.ozone.moderation.defs#identityEvent")]
745    IdentityEvent(Box<crate::tools_ozone::moderation::IdentityEvent<'a>>),
746    #[serde(rename = "tools.ozone.moderation.defs#recordEvent")]
747    RecordEvent(Box<crate::tools_ozone::moderation::RecordEvent<'a>>),
748    #[serde(rename = "tools.ozone.moderation.defs#modEventPriorityScore")]
749    ModEventPriorityScore(
750        Box<crate::tools_ozone::moderation::ModEventPriorityScore<'a>>,
751    ),
752    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceEvent")]
753    AgeAssuranceEvent(Box<crate::tools_ozone::moderation::AgeAssuranceEvent<'a>>),
754    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent")]
755    AgeAssuranceOverrideEvent(
756        Box<crate::tools_ozone::moderation::AgeAssuranceOverrideEvent<'a>>,
757    ),
758    #[serde(rename = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent")]
759    RevokeAccountCredentialsEvent(
760        Box<crate::tools_ozone::moderation::RevokeAccountCredentialsEvent<'a>>,
761    ),
762    #[serde(rename = "tools.ozone.moderation.defs#scheduleTakedownEvent")]
763    ScheduleTakedownEvent(
764        Box<crate::tools_ozone::moderation::ScheduleTakedownEvent<'a>>,
765    ),
766    #[serde(rename = "tools.ozone.moderation.defs#cancelScheduledTakedownEvent")]
767    CancelScheduledTakedownEvent(
768        Box<crate::tools_ozone::moderation::CancelScheduledTakedownEvent<'a>>,
769    ),
770}
771
772#[jacquard_derive::open_union]
773#[derive(
774    serde::Serialize,
775    serde::Deserialize,
776    Debug,
777    Clone,
778    PartialEq,
779    Eq,
780    jacquard_derive::IntoStatic
781)]
782#[serde(tag = "$type")]
783#[serde(bound(deserialize = "'de: 'a"))]
784pub enum ModEventViewSubject<'a> {
785    #[serde(rename = "com.atproto.admin.defs#repoRef")]
786    RepoRef(Box<crate::com_atproto::admin::RepoRef<'a>>),
787    #[serde(rename = "com.atproto.repo.strongRef")]
788    StrongRef(Box<crate::com_atproto::repo::strong_ref::StrongRef<'a>>),
789    #[serde(rename = "chat.bsky.convo.defs#messageRef")]
790    MessageRef(Box<crate::chat_bsky::convo::MessageRef<'a>>),
791}
792
793#[jacquard_derive::lexicon]
794#[derive(
795    serde::Serialize,
796    serde::Deserialize,
797    Debug,
798    Clone,
799    PartialEq,
800    Eq,
801    jacquard_derive::IntoStatic,
802    bon::Builder
803)]
804#[serde(rename_all = "camelCase")]
805pub struct ModEventViewDetail<'a> {
806    pub created_at: jacquard_common::types::string::Datetime,
807    #[serde(borrow)]
808    pub created_by: jacquard_common::types::string::Did<'a>,
809    #[serde(borrow)]
810    pub event: ModEventViewDetailEvent<'a>,
811    pub id: i64,
812    #[serde(skip_serializing_if = "std::option::Option::is_none")]
813    #[builder(into)]
814    #[serde(borrow)]
815    pub mod_tool: Option<crate::tools_ozone::moderation::ModTool<'a>>,
816    #[serde(borrow)]
817    pub subject: ModEventViewDetailSubject<'a>,
818    #[serde(borrow)]
819    pub subject_blobs: Vec<crate::tools_ozone::moderation::BlobView<'a>>,
820}
821
822#[jacquard_derive::open_union]
823#[derive(
824    serde::Serialize,
825    serde::Deserialize,
826    Debug,
827    Clone,
828    PartialEq,
829    Eq,
830    jacquard_derive::IntoStatic
831)]
832#[serde(tag = "$type")]
833#[serde(bound(deserialize = "'de: 'a"))]
834pub enum ModEventViewDetailEvent<'a> {
835    #[serde(rename = "tools.ozone.moderation.defs#modEventTakedown")]
836    ModEventTakedown(Box<crate::tools_ozone::moderation::ModEventTakedown<'a>>),
837    #[serde(rename = "tools.ozone.moderation.defs#modEventReverseTakedown")]
838    ModEventReverseTakedown(
839        Box<crate::tools_ozone::moderation::ModEventReverseTakedown<'a>>,
840    ),
841    #[serde(rename = "tools.ozone.moderation.defs#modEventComment")]
842    ModEventComment(Box<crate::tools_ozone::moderation::ModEventComment<'a>>),
843    #[serde(rename = "tools.ozone.moderation.defs#modEventReport")]
844    ModEventReport(Box<crate::tools_ozone::moderation::ModEventReport<'a>>),
845    #[serde(rename = "tools.ozone.moderation.defs#modEventLabel")]
846    ModEventLabel(Box<crate::tools_ozone::moderation::ModEventLabel<'a>>),
847    #[serde(rename = "tools.ozone.moderation.defs#modEventAcknowledge")]
848    ModEventAcknowledge(Box<crate::tools_ozone::moderation::ModEventAcknowledge<'a>>),
849    #[serde(rename = "tools.ozone.moderation.defs#modEventEscalate")]
850    ModEventEscalate(Box<crate::tools_ozone::moderation::ModEventEscalate<'a>>),
851    #[serde(rename = "tools.ozone.moderation.defs#modEventMute")]
852    ModEventMute(Box<crate::tools_ozone::moderation::ModEventMute<'a>>),
853    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmute")]
854    ModEventUnmute(Box<crate::tools_ozone::moderation::ModEventUnmute<'a>>),
855    #[serde(rename = "tools.ozone.moderation.defs#modEventMuteReporter")]
856    ModEventMuteReporter(Box<crate::tools_ozone::moderation::ModEventMuteReporter<'a>>),
857    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmuteReporter")]
858    ModEventUnmuteReporter(
859        Box<crate::tools_ozone::moderation::ModEventUnmuteReporter<'a>>,
860    ),
861    #[serde(rename = "tools.ozone.moderation.defs#modEventEmail")]
862    ModEventEmail(Box<crate::tools_ozone::moderation::ModEventEmail<'a>>),
863    #[serde(rename = "tools.ozone.moderation.defs#modEventResolveAppeal")]
864    ModEventResolveAppeal(
865        Box<crate::tools_ozone::moderation::ModEventResolveAppeal<'a>>,
866    ),
867    #[serde(rename = "tools.ozone.moderation.defs#modEventDivert")]
868    ModEventDivert(Box<crate::tools_ozone::moderation::ModEventDivert<'a>>),
869    #[serde(rename = "tools.ozone.moderation.defs#modEventTag")]
870    ModEventTag(Box<crate::tools_ozone::moderation::ModEventTag<'a>>),
871    #[serde(rename = "tools.ozone.moderation.defs#accountEvent")]
872    AccountEvent(Box<crate::tools_ozone::moderation::AccountEvent<'a>>),
873    #[serde(rename = "tools.ozone.moderation.defs#identityEvent")]
874    IdentityEvent(Box<crate::tools_ozone::moderation::IdentityEvent<'a>>),
875    #[serde(rename = "tools.ozone.moderation.defs#recordEvent")]
876    RecordEvent(Box<crate::tools_ozone::moderation::RecordEvent<'a>>),
877    #[serde(rename = "tools.ozone.moderation.defs#modEventPriorityScore")]
878    ModEventPriorityScore(
879        Box<crate::tools_ozone::moderation::ModEventPriorityScore<'a>>,
880    ),
881    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceEvent")]
882    AgeAssuranceEvent(Box<crate::tools_ozone::moderation::AgeAssuranceEvent<'a>>),
883    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent")]
884    AgeAssuranceOverrideEvent(
885        Box<crate::tools_ozone::moderation::AgeAssuranceOverrideEvent<'a>>,
886    ),
887    #[serde(rename = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent")]
888    RevokeAccountCredentialsEvent(
889        Box<crate::tools_ozone::moderation::RevokeAccountCredentialsEvent<'a>>,
890    ),
891    #[serde(rename = "tools.ozone.moderation.defs#scheduleTakedownEvent")]
892    ScheduleTakedownEvent(
893        Box<crate::tools_ozone::moderation::ScheduleTakedownEvent<'a>>,
894    ),
895    #[serde(rename = "tools.ozone.moderation.defs#cancelScheduledTakedownEvent")]
896    CancelScheduledTakedownEvent(
897        Box<crate::tools_ozone::moderation::CancelScheduledTakedownEvent<'a>>,
898    ),
899}
900
901#[jacquard_derive::open_union]
902#[derive(
903    serde::Serialize,
904    serde::Deserialize,
905    Debug,
906    Clone,
907    PartialEq,
908    Eq,
909    jacquard_derive::IntoStatic
910)]
911#[serde(tag = "$type")]
912#[serde(bound(deserialize = "'de: 'a"))]
913pub enum ModEventViewDetailSubject<'a> {
914    #[serde(rename = "tools.ozone.moderation.defs#repoView")]
915    RepoView(Box<crate::tools_ozone::moderation::RepoView<'a>>),
916    #[serde(rename = "tools.ozone.moderation.defs#repoViewNotFound")]
917    RepoViewNotFound(Box<crate::tools_ozone::moderation::RepoViewNotFound<'a>>),
918    #[serde(rename = "tools.ozone.moderation.defs#recordView")]
919    RecordView(Box<crate::tools_ozone::moderation::RecordView<'a>>),
920    #[serde(rename = "tools.ozone.moderation.defs#recordViewNotFound")]
921    RecordViewNotFound(Box<crate::tools_ozone::moderation::RecordViewNotFound<'a>>),
922}
923
924/// Moderation tool information for tracing the source of the action
925#[jacquard_derive::lexicon]
926#[derive(
927    serde::Serialize,
928    serde::Deserialize,
929    Debug,
930    Clone,
931    PartialEq,
932    Eq,
933    jacquard_derive::IntoStatic,
934    Default
935)]
936#[serde(rename_all = "camelCase")]
937pub struct ModTool<'a> {
938    /// Additional arbitrary metadata about the source
939    #[serde(skip_serializing_if = "std::option::Option::is_none")]
940    #[serde(borrow)]
941    pub meta: std::option::Option<jacquard_common::types::value::Data<'a>>,
942    /// Name/identifier of the source (e.g., 'automod', 'ozone/workspace')
943    #[serde(borrow)]
944    pub name: jacquard_common::CowStr<'a>,
945}
946
947#[jacquard_derive::lexicon]
948#[derive(
949    serde::Serialize,
950    serde::Deserialize,
951    Debug,
952    Clone,
953    PartialEq,
954    Eq,
955    jacquard_derive::IntoStatic,
956    Default
957)]
958#[serde(rename_all = "camelCase")]
959pub struct Moderation<'a> {
960    #[serde(skip_serializing_if = "std::option::Option::is_none")]
961    #[serde(borrow)]
962    pub subject_status: std::option::Option<
963        crate::tools_ozone::moderation::SubjectStatusView<'a>,
964    >,
965}
966
967#[jacquard_derive::lexicon]
968#[derive(
969    serde::Serialize,
970    serde::Deserialize,
971    Debug,
972    Clone,
973    PartialEq,
974    Eq,
975    jacquard_derive::IntoStatic,
976    Default
977)]
978#[serde(rename_all = "camelCase")]
979pub struct ModerationDetail<'a> {
980    #[serde(skip_serializing_if = "std::option::Option::is_none")]
981    #[serde(borrow)]
982    pub subject_status: std::option::Option<
983        crate::tools_ozone::moderation::SubjectStatusView<'a>,
984    >,
985}
986
987/// Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
988#[jacquard_derive::lexicon]
989#[derive(
990    serde::Serialize,
991    serde::Deserialize,
992    Debug,
993    Clone,
994    PartialEq,
995    Eq,
996    jacquard_derive::IntoStatic,
997    bon::Builder
998)]
999#[serde(rename_all = "camelCase")]
1000pub struct RecordEvent<'a> {
1001    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1002    #[builder(into)]
1003    #[serde(borrow)]
1004    pub cid: Option<jacquard_common::types::string::Cid<'a>>,
1005    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1006    #[builder(into)]
1007    #[serde(borrow)]
1008    pub comment: Option<jacquard_common::CowStr<'a>>,
1009    #[serde(borrow)]
1010    #[builder(into)]
1011    pub op: jacquard_common::CowStr<'a>,
1012    pub timestamp: jacquard_common::types::string::Datetime,
1013}
1014
1015#[jacquard_derive::lexicon]
1016#[derive(
1017    serde::Serialize,
1018    serde::Deserialize,
1019    Debug,
1020    Clone,
1021    PartialEq,
1022    Eq,
1023    jacquard_derive::IntoStatic,
1024    Default
1025)]
1026#[serde(rename_all = "camelCase")]
1027pub struct RecordHosting<'a> {
1028    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1029    pub created_at: std::option::Option<jacquard_common::types::string::Datetime>,
1030    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1031    pub deleted_at: std::option::Option<jacquard_common::types::string::Datetime>,
1032    #[serde(borrow)]
1033    pub status: jacquard_common::CowStr<'a>,
1034    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1035    pub updated_at: std::option::Option<jacquard_common::types::string::Datetime>,
1036}
1037
1038#[jacquard_derive::lexicon]
1039#[derive(
1040    serde::Serialize,
1041    serde::Deserialize,
1042    Debug,
1043    Clone,
1044    PartialEq,
1045    Eq,
1046    jacquard_derive::IntoStatic,
1047    bon::Builder
1048)]
1049#[serde(rename_all = "camelCase")]
1050pub struct RecordView<'a> {
1051    #[serde(borrow)]
1052    pub blob_cids: Vec<jacquard_common::types::string::Cid<'a>>,
1053    #[serde(borrow)]
1054    pub cid: jacquard_common::types::string::Cid<'a>,
1055    pub indexed_at: jacquard_common::types::string::Datetime,
1056    #[serde(borrow)]
1057    pub moderation: crate::tools_ozone::moderation::Moderation<'a>,
1058    #[serde(borrow)]
1059    pub repo: crate::tools_ozone::moderation::RepoView<'a>,
1060    #[serde(borrow)]
1061    pub uri: jacquard_common::types::string::AtUri<'a>,
1062    #[serde(borrow)]
1063    pub value: jacquard_common::types::value::Data<'a>,
1064}
1065
1066#[jacquard_derive::lexicon]
1067#[derive(
1068    serde::Serialize,
1069    serde::Deserialize,
1070    Debug,
1071    Clone,
1072    PartialEq,
1073    Eq,
1074    jacquard_derive::IntoStatic,
1075    bon::Builder
1076)]
1077#[serde(rename_all = "camelCase")]
1078pub struct RecordViewDetail<'a> {
1079    #[serde(borrow)]
1080    pub blobs: Vec<crate::tools_ozone::moderation::BlobView<'a>>,
1081    #[serde(borrow)]
1082    pub cid: jacquard_common::types::string::Cid<'a>,
1083    pub indexed_at: jacquard_common::types::string::Datetime,
1084    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1085    #[builder(into)]
1086    #[serde(borrow)]
1087    pub labels: Option<Vec<crate::com_atproto::label::Label<'a>>>,
1088    #[serde(borrow)]
1089    pub moderation: crate::tools_ozone::moderation::ModerationDetail<'a>,
1090    #[serde(borrow)]
1091    pub repo: crate::tools_ozone::moderation::RepoView<'a>,
1092    #[serde(borrow)]
1093    pub uri: jacquard_common::types::string::AtUri<'a>,
1094    #[serde(borrow)]
1095    pub value: jacquard_common::types::value::Data<'a>,
1096}
1097
1098#[jacquard_derive::lexicon]
1099#[derive(
1100    serde::Serialize,
1101    serde::Deserialize,
1102    Debug,
1103    Clone,
1104    PartialEq,
1105    Eq,
1106    jacquard_derive::IntoStatic,
1107    bon::Builder
1108)]
1109#[serde(rename_all = "camelCase")]
1110pub struct RecordViewNotFound<'a> {
1111    #[serde(borrow)]
1112    pub uri: jacquard_common::types::string::AtUri<'a>,
1113}
1114
1115/// Statistics about a set of record subject items
1116#[jacquard_derive::lexicon]
1117#[derive(
1118    serde::Serialize,
1119    serde::Deserialize,
1120    Debug,
1121    Clone,
1122    PartialEq,
1123    Eq,
1124    jacquard_derive::IntoStatic,
1125    Default
1126)]
1127#[serde(rename_all = "camelCase")]
1128pub struct RecordsStats<'a> {
1129    /// Number of items that were appealed at least once
1130    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1131    pub appealed_count: std::option::Option<i64>,
1132    /// Number of items that were escalated at least once
1133    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1134    pub escalated_count: std::option::Option<i64>,
1135    /// Number of item currently in "reviewOpen" or "reviewEscalated" state
1136    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1137    pub pending_count: std::option::Option<i64>,
1138    /// Number of item currently in "reviewNone" or "reviewClosed" state
1139    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1140    pub processed_count: std::option::Option<i64>,
1141    /// Number of items that were reported at least once
1142    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1143    pub reported_count: std::option::Option<i64>,
1144    /// Total number of item in the set
1145    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1146    pub subject_count: std::option::Option<i64>,
1147    /// Number of item currently taken down
1148    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1149    pub takendown_count: std::option::Option<i64>,
1150    /// Cumulative sum of the number of reports on the items in the set
1151    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1152    pub total_reports: std::option::Option<i64>,
1153}
1154
1155#[jacquard_derive::lexicon]
1156#[derive(
1157    serde::Serialize,
1158    serde::Deserialize,
1159    Debug,
1160    Clone,
1161    PartialEq,
1162    Eq,
1163    jacquard_derive::IntoStatic,
1164    bon::Builder
1165)]
1166#[serde(rename_all = "camelCase")]
1167pub struct RepoView<'a> {
1168    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1169    #[builder(into)]
1170    pub deactivated_at: Option<jacquard_common::types::string::Datetime>,
1171    #[serde(borrow)]
1172    pub did: jacquard_common::types::string::Did<'a>,
1173    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1174    #[builder(into)]
1175    #[serde(borrow)]
1176    pub email: Option<jacquard_common::CowStr<'a>>,
1177    #[serde(borrow)]
1178    pub handle: jacquard_common::types::string::Handle<'a>,
1179    pub indexed_at: jacquard_common::types::string::Datetime,
1180    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1181    #[builder(into)]
1182    #[serde(borrow)]
1183    pub invite_note: Option<jacquard_common::CowStr<'a>>,
1184    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1185    #[builder(into)]
1186    #[serde(borrow)]
1187    pub invited_by: Option<crate::com_atproto::server::InviteCode<'a>>,
1188    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1189    #[builder(into)]
1190    pub invites_disabled: Option<bool>,
1191    #[serde(borrow)]
1192    pub moderation: crate::tools_ozone::moderation::Moderation<'a>,
1193    #[serde(borrow)]
1194    pub related_records: Vec<jacquard_common::types::value::Data<'a>>,
1195    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1196    #[builder(into)]
1197    #[serde(borrow)]
1198    pub threat_signatures: Option<Vec<crate::com_atproto::admin::ThreatSignature<'a>>>,
1199}
1200
1201#[jacquard_derive::lexicon]
1202#[derive(
1203    serde::Serialize,
1204    serde::Deserialize,
1205    Debug,
1206    Clone,
1207    PartialEq,
1208    Eq,
1209    jacquard_derive::IntoStatic,
1210    bon::Builder
1211)]
1212#[serde(rename_all = "camelCase")]
1213pub struct RepoViewDetail<'a> {
1214    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1215    #[builder(into)]
1216    pub deactivated_at: Option<jacquard_common::types::string::Datetime>,
1217    #[serde(borrow)]
1218    pub did: jacquard_common::types::string::Did<'a>,
1219    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1220    #[builder(into)]
1221    #[serde(borrow)]
1222    pub email: Option<jacquard_common::CowStr<'a>>,
1223    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1224    #[builder(into)]
1225    pub email_confirmed_at: Option<jacquard_common::types::string::Datetime>,
1226    #[serde(borrow)]
1227    pub handle: jacquard_common::types::string::Handle<'a>,
1228    pub indexed_at: jacquard_common::types::string::Datetime,
1229    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1230    #[builder(into)]
1231    #[serde(borrow)]
1232    pub invite_note: Option<jacquard_common::CowStr<'a>>,
1233    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1234    #[builder(into)]
1235    #[serde(borrow)]
1236    pub invited_by: Option<crate::com_atproto::server::InviteCode<'a>>,
1237    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1238    #[builder(into)]
1239    #[serde(borrow)]
1240    pub invites: Option<Vec<crate::com_atproto::server::InviteCode<'a>>>,
1241    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1242    #[builder(into)]
1243    pub invites_disabled: Option<bool>,
1244    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1245    #[builder(into)]
1246    #[serde(borrow)]
1247    pub labels: Option<Vec<crate::com_atproto::label::Label<'a>>>,
1248    #[serde(borrow)]
1249    pub moderation: crate::tools_ozone::moderation::ModerationDetail<'a>,
1250    #[serde(borrow)]
1251    pub related_records: Vec<jacquard_common::types::value::Data<'a>>,
1252    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1253    #[builder(into)]
1254    #[serde(borrow)]
1255    pub threat_signatures: Option<Vec<crate::com_atproto::admin::ThreatSignature<'a>>>,
1256}
1257
1258#[jacquard_derive::lexicon]
1259#[derive(
1260    serde::Serialize,
1261    serde::Deserialize,
1262    Debug,
1263    Clone,
1264    PartialEq,
1265    Eq,
1266    jacquard_derive::IntoStatic,
1267    bon::Builder
1268)]
1269#[serde(rename_all = "camelCase")]
1270pub struct RepoViewNotFound<'a> {
1271    #[serde(borrow)]
1272    pub did: jacquard_common::types::string::Did<'a>,
1273}
1274
1275#[jacquard_derive::lexicon]
1276#[derive(
1277    serde::Serialize,
1278    serde::Deserialize,
1279    Debug,
1280    Clone,
1281    PartialEq,
1282    Eq,
1283    jacquard_derive::IntoStatic,
1284    bon::Builder
1285)]
1286#[serde(rename_all = "camelCase")]
1287pub struct ReporterStats<'a> {
1288    /// The total number of reports made by the user on accounts.
1289    pub account_report_count: i64,
1290    #[serde(borrow)]
1291    pub did: jacquard_common::types::string::Did<'a>,
1292    /// The total number of accounts labeled as a result of the user's reports.
1293    pub labeled_account_count: i64,
1294    /// The total number of records labeled as a result of the user's reports.
1295    pub labeled_record_count: i64,
1296    /// The total number of reports made by the user on records.
1297    pub record_report_count: i64,
1298    /// The total number of accounts reported by the user.
1299    pub reported_account_count: i64,
1300    /// The total number of records reported by the user.
1301    pub reported_record_count: i64,
1302    /// The total number of accounts taken down as a result of the user's reports.
1303    pub takendown_account_count: i64,
1304    /// The total number of records taken down as a result of the user's reports.
1305    pub takendown_record_count: i64,
1306}
1307
1308/// Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator
1309#[derive(
1310    serde::Serialize,
1311    serde::Deserialize,
1312    Debug,
1313    Clone,
1314    PartialEq,
1315    Eq,
1316    Hash,
1317    jacquard_derive::IntoStatic
1318)]
1319pub struct ReviewClosed;
1320impl std::fmt::Display for ReviewClosed {
1321    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1322        write!(f, "reviewClosed")
1323    }
1324}
1325
1326/// Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator
1327#[derive(
1328    serde::Serialize,
1329    serde::Deserialize,
1330    Debug,
1331    Clone,
1332    PartialEq,
1333    Eq,
1334    Hash,
1335    jacquard_derive::IntoStatic
1336)]
1337pub struct ReviewEscalated;
1338impl std::fmt::Display for ReviewEscalated {
1339    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1340        write!(f, "reviewEscalated")
1341    }
1342}
1343
1344/// Moderator review status of a subject: Unnecessary. Indicates that the subject does not need a review at the moment but there is probably some moderation related metadata available for it
1345#[derive(
1346    serde::Serialize,
1347    serde::Deserialize,
1348    Debug,
1349    Clone,
1350    PartialEq,
1351    Eq,
1352    Hash,
1353    jacquard_derive::IntoStatic
1354)]
1355pub struct ReviewNone;
1356impl std::fmt::Display for ReviewNone {
1357    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1358        write!(f, "reviewNone")
1359    }
1360}
1361
1362/// Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator
1363#[derive(
1364    serde::Serialize,
1365    serde::Deserialize,
1366    Debug,
1367    Clone,
1368    PartialEq,
1369    Eq,
1370    Hash,
1371    jacquard_derive::IntoStatic
1372)]
1373pub struct ReviewOpen;
1374impl std::fmt::Display for ReviewOpen {
1375    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1376        write!(f, "reviewOpen")
1377    }
1378}
1379
1380/// Account credentials revocation by moderators. Only works on DID subjects.
1381#[jacquard_derive::lexicon]
1382#[derive(
1383    serde::Serialize,
1384    serde::Deserialize,
1385    Debug,
1386    Clone,
1387    PartialEq,
1388    Eq,
1389    jacquard_derive::IntoStatic,
1390    Default
1391)]
1392#[serde(rename_all = "camelCase")]
1393pub struct RevokeAccountCredentialsEvent<'a> {
1394    /// Comment describing the reason for the revocation.
1395    #[serde(borrow)]
1396    pub comment: jacquard_common::CowStr<'a>,
1397}
1398
1399/// Logs a scheduled takedown action for an account.
1400#[jacquard_derive::lexicon]
1401#[derive(
1402    serde::Serialize,
1403    serde::Deserialize,
1404    Debug,
1405    Clone,
1406    PartialEq,
1407    Eq,
1408    jacquard_derive::IntoStatic,
1409    Default
1410)]
1411#[serde(rename_all = "camelCase")]
1412pub struct ScheduleTakedownEvent<'a> {
1413    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1414    #[serde(borrow)]
1415    pub comment: std::option::Option<jacquard_common::CowStr<'a>>,
1416    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1417    pub execute_after: std::option::Option<jacquard_common::types::string::Datetime>,
1418    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1419    pub execute_at: std::option::Option<jacquard_common::types::string::Datetime>,
1420    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1421    pub execute_until: std::option::Option<jacquard_common::types::string::Datetime>,
1422}
1423
1424/// View of a scheduled moderation action
1425#[jacquard_derive::lexicon]
1426#[derive(
1427    serde::Serialize,
1428    serde::Deserialize,
1429    Debug,
1430    Clone,
1431    PartialEq,
1432    Eq,
1433    jacquard_derive::IntoStatic,
1434    bon::Builder
1435)]
1436#[serde(rename_all = "camelCase")]
1437pub struct ScheduledActionView<'a> {
1438    /// Type of action to be executed
1439    #[serde(borrow)]
1440    #[builder(into)]
1441    pub action: jacquard_common::CowStr<'a>,
1442    /// When the scheduled action was created
1443    pub created_at: jacquard_common::types::string::Datetime,
1444    /// DID of the user who created this scheduled action
1445    #[serde(borrow)]
1446    pub created_by: jacquard_common::types::string::Did<'a>,
1447    /// Subject DID for the action
1448    #[serde(borrow)]
1449    pub did: jacquard_common::types::string::Did<'a>,
1450    /// Serialized event object that will be propagated to the event when performed
1451    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1452    #[builder(into)]
1453    #[serde(borrow)]
1454    pub event_data: Option<jacquard_common::types::value::Data<'a>>,
1455    /// Earliest time to execute the action (for randomized scheduling)
1456    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1457    #[builder(into)]
1458    pub execute_after: Option<jacquard_common::types::string::Datetime>,
1459    /// Exact time to execute the action
1460    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1461    #[builder(into)]
1462    pub execute_at: Option<jacquard_common::types::string::Datetime>,
1463    /// Latest time to execute the action (for randomized scheduling)
1464    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1465    #[builder(into)]
1466    pub execute_until: Option<jacquard_common::types::string::Datetime>,
1467    /// ID of the moderation event created when action was successfully executed
1468    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1469    #[builder(into)]
1470    pub execution_event_id: Option<i64>,
1471    /// Auto-incrementing row ID
1472    pub id: i64,
1473    /// When the action was last attempted to be executed
1474    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1475    #[builder(into)]
1476    pub last_executed_at: Option<jacquard_common::types::string::Datetime>,
1477    /// Reason for the last execution failure
1478    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1479    #[builder(into)]
1480    #[serde(borrow)]
1481    pub last_failure_reason: Option<jacquard_common::CowStr<'a>>,
1482    /// Whether execution time should be randomized within the specified range
1483    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1484    #[builder(into)]
1485    pub randomize_execution: Option<bool>,
1486    /// Current status of the scheduled action
1487    #[serde(borrow)]
1488    #[builder(into)]
1489    pub status: jacquard_common::CowStr<'a>,
1490    /// When the scheduled action was last updated
1491    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1492    #[builder(into)]
1493    pub updated_at: Option<jacquard_common::types::string::Datetime>,
1494}
1495
1496#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1497pub enum SubjectReviewState<'a> {
1498    ReviewOpen,
1499    ReviewEscalated,
1500    ReviewClosed,
1501    ReviewNone,
1502    Other(jacquard_common::CowStr<'a>),
1503}
1504
1505impl<'a> SubjectReviewState<'a> {
1506    pub fn as_str(&self) -> &str {
1507        match self {
1508            Self::ReviewOpen => "#reviewOpen",
1509            Self::ReviewEscalated => "#reviewEscalated",
1510            Self::ReviewClosed => "#reviewClosed",
1511            Self::ReviewNone => "#reviewNone",
1512            Self::Other(s) => s.as_ref(),
1513        }
1514    }
1515}
1516
1517impl<'a> From<&'a str> for SubjectReviewState<'a> {
1518    fn from(s: &'a str) -> Self {
1519        match s {
1520            "#reviewOpen" => Self::ReviewOpen,
1521            "#reviewEscalated" => Self::ReviewEscalated,
1522            "#reviewClosed" => Self::ReviewClosed,
1523            "#reviewNone" => Self::ReviewNone,
1524            _ => Self::Other(jacquard_common::CowStr::from(s)),
1525        }
1526    }
1527}
1528
1529impl<'a> From<String> for SubjectReviewState<'a> {
1530    fn from(s: String) -> Self {
1531        match s.as_str() {
1532            "#reviewOpen" => Self::ReviewOpen,
1533            "#reviewEscalated" => Self::ReviewEscalated,
1534            "#reviewClosed" => Self::ReviewClosed,
1535            "#reviewNone" => Self::ReviewNone,
1536            _ => Self::Other(jacquard_common::CowStr::from(s)),
1537        }
1538    }
1539}
1540
1541impl<'a> AsRef<str> for SubjectReviewState<'a> {
1542    fn as_ref(&self) -> &str {
1543        self.as_str()
1544    }
1545}
1546
1547impl<'a> serde::Serialize for SubjectReviewState<'a> {
1548    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
1549    where
1550        S: serde::Serializer,
1551    {
1552        serializer.serialize_str(self.as_str())
1553    }
1554}
1555
1556impl<'de, 'a> serde::Deserialize<'de> for SubjectReviewState<'a>
1557where
1558    'de: 'a,
1559{
1560    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1561    where
1562        D: serde::Deserializer<'de>,
1563    {
1564        let s = <&'de str>::deserialize(deserializer)?;
1565        Ok(Self::from(s))
1566    }
1567}
1568
1569impl jacquard_common::IntoStatic for SubjectReviewState<'_> {
1570    type Output = SubjectReviewState<'static>;
1571    fn into_static(self) -> Self::Output {
1572        match self {
1573            SubjectReviewState::ReviewOpen => SubjectReviewState::ReviewOpen,
1574            SubjectReviewState::ReviewEscalated => SubjectReviewState::ReviewEscalated,
1575            SubjectReviewState::ReviewClosed => SubjectReviewState::ReviewClosed,
1576            SubjectReviewState::ReviewNone => SubjectReviewState::ReviewNone,
1577            SubjectReviewState::Other(v) => SubjectReviewState::Other(v.into_static()),
1578        }
1579    }
1580}
1581
1582#[jacquard_derive::lexicon]
1583#[derive(
1584    serde::Serialize,
1585    serde::Deserialize,
1586    Debug,
1587    Clone,
1588    PartialEq,
1589    Eq,
1590    jacquard_derive::IntoStatic,
1591    bon::Builder
1592)]
1593#[serde(rename_all = "camelCase")]
1594pub struct SubjectStatusView<'a> {
1595    /// Statistics related to the account subject
1596    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1597    #[builder(into)]
1598    #[serde(borrow)]
1599    pub account_stats: Option<crate::tools_ozone::moderation::AccountStats<'a>>,
1600    /// Current age assurance state of the subject.
1601    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1602    #[builder(into)]
1603    #[serde(borrow)]
1604    pub age_assurance_state: Option<jacquard_common::CowStr<'a>>,
1605    /// Whether or not the last successful update to age assurance was made by the user or admin.
1606    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1607    #[builder(into)]
1608    #[serde(borrow)]
1609    pub age_assurance_updated_by: Option<jacquard_common::CowStr<'a>>,
1610    /// True indicates that the a previously taken moderator action was appealed against, by the author of the content. False indicates last appeal was resolved by moderators.
1611    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1612    #[builder(into)]
1613    pub appealed: Option<bool>,
1614    /// Sticky comment on the subject.
1615    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1616    #[builder(into)]
1617    #[serde(borrow)]
1618    pub comment: Option<jacquard_common::CowStr<'a>>,
1619    /// Timestamp referencing the first moderation status impacting event was emitted on the subject
1620    pub created_at: jacquard_common::types::string::Datetime,
1621    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1622    #[builder(into)]
1623    #[serde(borrow)]
1624    pub hosting: Option<SubjectStatusViewHosting<'a>>,
1625    pub id: i64,
1626    /// Timestamp referencing when the author of the subject appealed a moderation action
1627    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1628    #[builder(into)]
1629    pub last_appealed_at: Option<jacquard_common::types::string::Datetime>,
1630    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1631    #[builder(into)]
1632    pub last_reported_at: Option<jacquard_common::types::string::Datetime>,
1633    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1634    #[builder(into)]
1635    pub last_reviewed_at: Option<jacquard_common::types::string::Datetime>,
1636    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1637    #[builder(into)]
1638    #[serde(borrow)]
1639    pub last_reviewed_by: Option<jacquard_common::types::string::Did<'a>>,
1640    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1641    #[builder(into)]
1642    pub mute_reporting_until: Option<jacquard_common::types::string::Datetime>,
1643    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1644    #[builder(into)]
1645    pub mute_until: Option<jacquard_common::types::string::Datetime>,
1646    /// Numeric value representing the level of priority. Higher score means higher priority.
1647    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1648    #[builder(into)]
1649    pub priority_score: Option<i64>,
1650    /// Statistics related to the record subjects authored by the subject's account
1651    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1652    #[builder(into)]
1653    #[serde(borrow)]
1654    pub records_stats: Option<crate::tools_ozone::moderation::RecordsStats<'a>>,
1655    #[serde(borrow)]
1656    pub review_state: crate::tools_ozone::moderation::SubjectReviewState<'a>,
1657    #[serde(borrow)]
1658    pub subject: SubjectStatusViewSubject<'a>,
1659    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1660    #[builder(into)]
1661    #[serde(borrow)]
1662    pub subject_blob_cids: Option<Vec<jacquard_common::types::string::Cid<'a>>>,
1663    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1664    #[builder(into)]
1665    #[serde(borrow)]
1666    pub subject_repo_handle: Option<jacquard_common::CowStr<'a>>,
1667    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1668    #[builder(into)]
1669    pub suspend_until: Option<jacquard_common::types::string::Datetime>,
1670    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1671    #[builder(into)]
1672    #[serde(borrow)]
1673    pub tags: Option<Vec<jacquard_common::CowStr<'a>>>,
1674    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1675    #[builder(into)]
1676    pub takendown: Option<bool>,
1677    /// Timestamp referencing when the last update was made to the moderation status of the subject
1678    pub updated_at: jacquard_common::types::string::Datetime,
1679}
1680
1681#[jacquard_derive::open_union]
1682#[derive(
1683    serde::Serialize,
1684    serde::Deserialize,
1685    Debug,
1686    Clone,
1687    PartialEq,
1688    Eq,
1689    jacquard_derive::IntoStatic
1690)]
1691#[serde(tag = "$type")]
1692#[serde(bound(deserialize = "'de: 'a"))]
1693pub enum SubjectStatusViewHosting<'a> {
1694    #[serde(rename = "tools.ozone.moderation.defs#accountHosting")]
1695    AccountHosting(Box<crate::tools_ozone::moderation::AccountHosting<'a>>),
1696    #[serde(rename = "tools.ozone.moderation.defs#recordHosting")]
1697    RecordHosting(Box<crate::tools_ozone::moderation::RecordHosting<'a>>),
1698}
1699
1700#[jacquard_derive::open_union]
1701#[derive(
1702    serde::Serialize,
1703    serde::Deserialize,
1704    Debug,
1705    Clone,
1706    PartialEq,
1707    Eq,
1708    jacquard_derive::IntoStatic
1709)]
1710#[serde(tag = "$type")]
1711#[serde(bound(deserialize = "'de: 'a"))]
1712pub enum SubjectStatusViewSubject<'a> {
1713    #[serde(rename = "com.atproto.admin.defs#repoRef")]
1714    RepoRef(Box<crate::com_atproto::admin::RepoRef<'a>>),
1715    #[serde(rename = "com.atproto.repo.strongRef")]
1716    StrongRef(Box<crate::com_atproto::repo::strong_ref::StrongRef<'a>>),
1717    #[serde(rename = "chat.bsky.convo.defs#messageRef")]
1718    MessageRef(Box<crate::chat_bsky::convo::MessageRef<'a>>),
1719}
1720
1721/// Detailed view of a subject. For record subjects, the author's repo and profile will be returned.
1722#[jacquard_derive::lexicon]
1723#[derive(
1724    serde::Serialize,
1725    serde::Deserialize,
1726    Debug,
1727    Clone,
1728    PartialEq,
1729    Eq,
1730    jacquard_derive::IntoStatic,
1731    bon::Builder
1732)]
1733#[serde(rename_all = "camelCase")]
1734pub struct SubjectView<'a> {
1735    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1736    #[builder(into)]
1737    #[serde(borrow)]
1738    pub profile: Option<jacquard_common::types::value::Data<'a>>,
1739    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1740    #[builder(into)]
1741    #[serde(borrow)]
1742    pub record: Option<crate::tools_ozone::moderation::RecordViewDetail<'a>>,
1743    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1744    #[builder(into)]
1745    #[serde(borrow)]
1746    pub repo: Option<crate::tools_ozone::moderation::RepoViewDetail<'a>>,
1747    #[serde(skip_serializing_if = "std::option::Option::is_none")]
1748    #[builder(into)]
1749    #[serde(borrow)]
1750    pub status: Option<crate::tools_ozone::moderation::SubjectStatusView<'a>>,
1751    #[serde(borrow)]
1752    #[builder(into)]
1753    pub subject: jacquard_common::CowStr<'a>,
1754    #[serde(borrow)]
1755    pub r#type: crate::com_atproto::moderation::SubjectType<'a>,
1756}
1757
1758/// Moderation event timeline event for a PLC create operation
1759#[derive(
1760    serde::Serialize,
1761    serde::Deserialize,
1762    Debug,
1763    Clone,
1764    PartialEq,
1765    Eq,
1766    Hash,
1767    jacquard_derive::IntoStatic
1768)]
1769pub struct TimelineEventPlcCreate;
1770impl std::fmt::Display for TimelineEventPlcCreate {
1771    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1772        write!(f, "timelineEventPlcCreate")
1773    }
1774}
1775
1776/// Moderation event timeline event for generic PLC operation
1777#[derive(
1778    serde::Serialize,
1779    serde::Deserialize,
1780    Debug,
1781    Clone,
1782    PartialEq,
1783    Eq,
1784    Hash,
1785    jacquard_derive::IntoStatic
1786)]
1787pub struct TimelineEventPlcOperation;
1788impl std::fmt::Display for TimelineEventPlcOperation {
1789    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1790        write!(f, "timelineEventPlcOperation")
1791    }
1792}
1793
1794/// Moderation event timeline event for a PLC tombstone operation
1795#[derive(
1796    serde::Serialize,
1797    serde::Deserialize,
1798    Debug,
1799    Clone,
1800    PartialEq,
1801    Eq,
1802    Hash,
1803    jacquard_derive::IntoStatic
1804)]
1805pub struct TimelineEventPlcTombstone;
1806impl std::fmt::Display for TimelineEventPlcTombstone {
1807    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1808        write!(f, "timelineEventPlcTombstone")
1809    }
1810}
1811
1812#[jacquard_derive::lexicon]
1813#[derive(
1814    serde::Serialize,
1815    serde::Deserialize,
1816    Debug,
1817    Clone,
1818    PartialEq,
1819    Eq,
1820    jacquard_derive::IntoStatic,
1821    bon::Builder
1822)]
1823#[serde(rename_all = "camelCase")]
1824pub struct VideoDetails<'a> {
1825    pub height: i64,
1826    pub length: i64,
1827    pub width: i64,
1828}