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