atrium_api/tools/ozone/moderation/
defs.rs

1// @generated - This file is generated by atrium-codegen. DO NOT EDIT.
2//!Definitions for the `tools.ozone.moderation.defs` namespace.
3///Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
4#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5#[serde(rename_all = "camelCase")]
6pub struct AccountEventData {
7    ///Indicates that the account has a repository which can be fetched from the host that emitted this event.
8    pub active: bool,
9    #[serde(skip_serializing_if = "core::option::Option::is_none")]
10    pub comment: core::option::Option<String>,
11    #[serde(skip_serializing_if = "core::option::Option::is_none")]
12    pub status: core::option::Option<String>,
13    pub timestamp: crate::types::string::Datetime,
14}
15pub type AccountEvent = crate::types::Object<AccountEventData>;
16#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
17#[serde(rename_all = "camelCase")]
18pub struct AccountHostingData {
19    #[serde(skip_serializing_if = "core::option::Option::is_none")]
20    pub created_at: core::option::Option<crate::types::string::Datetime>,
21    #[serde(skip_serializing_if = "core::option::Option::is_none")]
22    pub deactivated_at: core::option::Option<crate::types::string::Datetime>,
23    #[serde(skip_serializing_if = "core::option::Option::is_none")]
24    pub deleted_at: core::option::Option<crate::types::string::Datetime>,
25    #[serde(skip_serializing_if = "core::option::Option::is_none")]
26    pub reactivated_at: core::option::Option<crate::types::string::Datetime>,
27    pub status: String,
28    #[serde(skip_serializing_if = "core::option::Option::is_none")]
29    pub updated_at: core::option::Option<crate::types::string::Datetime>,
30}
31pub type AccountHosting = crate::types::Object<AccountHostingData>;
32///Statistics about a particular account subject
33#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
34#[serde(rename_all = "camelCase")]
35pub struct AccountStatsData {
36    ///Total number of appeals against a moderation action on the account
37    #[serde(skip_serializing_if = "core::option::Option::is_none")]
38    pub appeal_count: core::option::Option<i64>,
39    ///Number of times the account was escalated
40    #[serde(skip_serializing_if = "core::option::Option::is_none")]
41    pub escalate_count: core::option::Option<i64>,
42    ///Total number of reports on the account
43    #[serde(skip_serializing_if = "core::option::Option::is_none")]
44    pub report_count: core::option::Option<i64>,
45    ///Number of times the account was suspended
46    #[serde(skip_serializing_if = "core::option::Option::is_none")]
47    pub suspend_count: core::option::Option<i64>,
48    ///Number of times the account was taken down
49    #[serde(skip_serializing_if = "core::option::Option::is_none")]
50    pub takedown_count: core::option::Option<i64>,
51}
52pub type AccountStats = crate::types::Object<AccountStatsData>;
53///Age assurance info coming directly from users. Only works on DID subjects.
54#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
55#[serde(rename_all = "camelCase")]
56pub struct AgeAssuranceEventData {
57    ///The unique identifier for this instance of the age assurance flow, in UUID format.
58    pub attempt_id: String,
59    ///The IP address used when completing the AA flow.
60    #[serde(skip_serializing_if = "core::option::Option::is_none")]
61    pub complete_ip: core::option::Option<String>,
62    ///The user agent used when completing the AA flow.
63    #[serde(skip_serializing_if = "core::option::Option::is_none")]
64    pub complete_ua: core::option::Option<String>,
65    ///The date and time of this write operation.
66    pub created_at: crate::types::string::Datetime,
67    ///The IP address used when initiating the AA flow.
68    #[serde(skip_serializing_if = "core::option::Option::is_none")]
69    pub init_ip: core::option::Option<String>,
70    ///The user agent used when initiating the AA flow.
71    #[serde(skip_serializing_if = "core::option::Option::is_none")]
72    pub init_ua: core::option::Option<String>,
73    ///The status of the age assurance process.
74    pub status: String,
75}
76pub type AgeAssuranceEvent = crate::types::Object<AgeAssuranceEventData>;
77///Age assurance status override by moderators. Only works on DID subjects.
78#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
79#[serde(rename_all = "camelCase")]
80pub struct AgeAssuranceOverrideEventData {
81    ///Comment describing the reason for the override.
82    pub comment: String,
83    ///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.
84    pub status: String,
85}
86pub type AgeAssuranceOverrideEvent = crate::types::Object<AgeAssuranceOverrideEventData>;
87#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
88#[serde(rename_all = "camelCase")]
89pub struct BlobViewData {
90    pub cid: crate::types::string::Cid,
91    pub created_at: crate::types::string::Datetime,
92    #[serde(skip_serializing_if = "core::option::Option::is_none")]
93    pub details: core::option::Option<crate::types::Union<BlobViewDetailsRefs>>,
94    pub mime_type: String,
95    #[serde(skip_serializing_if = "core::option::Option::is_none")]
96    pub moderation: core::option::Option<Moderation>,
97    pub size: i64,
98}
99pub type BlobView = crate::types::Object<BlobViewData>;
100///Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
101#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
102#[serde(rename_all = "camelCase")]
103pub struct IdentityEventData {
104    #[serde(skip_serializing_if = "core::option::Option::is_none")]
105    pub comment: core::option::Option<String>,
106    #[serde(skip_serializing_if = "core::option::Option::is_none")]
107    pub handle: core::option::Option<crate::types::string::Handle>,
108    #[serde(skip_serializing_if = "core::option::Option::is_none")]
109    pub pds_host: core::option::Option<String>,
110    pub timestamp: crate::types::string::Datetime,
111    #[serde(skip_serializing_if = "core::option::Option::is_none")]
112    pub tombstone: core::option::Option<bool>,
113}
114pub type IdentityEvent = crate::types::Object<IdentityEventData>;
115#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
116#[serde(rename_all = "camelCase")]
117pub struct ImageDetailsData {
118    pub height: i64,
119    pub width: i64,
120}
121pub type ImageDetails = crate::types::Object<ImageDetailsData>;
122#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
123#[serde(rename_all = "camelCase")]
124pub struct ModEventAcknowledgeData {
125    ///If true, all other reports on content authored by this account will be resolved (acknowledged).
126    #[serde(skip_serializing_if = "core::option::Option::is_none")]
127    pub acknowledge_account_subjects: core::option::Option<bool>,
128    #[serde(skip_serializing_if = "core::option::Option::is_none")]
129    pub comment: core::option::Option<String>,
130}
131pub type ModEventAcknowledge = crate::types::Object<ModEventAcknowledgeData>;
132///Add a comment to a subject. An empty comment will clear any previously set sticky comment.
133#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
134#[serde(rename_all = "camelCase")]
135pub struct ModEventCommentData {
136    #[serde(skip_serializing_if = "core::option::Option::is_none")]
137    pub comment: core::option::Option<String>,
138    ///Make the comment persistent on the subject
139    #[serde(skip_serializing_if = "core::option::Option::is_none")]
140    pub sticky: core::option::Option<bool>,
141}
142pub type ModEventComment = crate::types::Object<ModEventCommentData>;
143///Divert a record's blobs to a 3rd party service for further scanning/tagging
144#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
145#[serde(rename_all = "camelCase")]
146pub struct ModEventDivertData {
147    #[serde(skip_serializing_if = "core::option::Option::is_none")]
148    pub comment: core::option::Option<String>,
149}
150pub type ModEventDivert = crate::types::Object<ModEventDivertData>;
151///Keep a log of outgoing email to a user
152#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
153#[serde(rename_all = "camelCase")]
154pub struct ModEventEmailData {
155    ///Additional comment about the outgoing comm.
156    #[serde(skip_serializing_if = "core::option::Option::is_none")]
157    pub comment: core::option::Option<String>,
158    ///The content of the email sent to the user.
159    #[serde(skip_serializing_if = "core::option::Option::is_none")]
160    pub content: core::option::Option<String>,
161    ///The subject line of the email sent to the user.
162    pub subject_line: String,
163}
164pub type ModEventEmail = crate::types::Object<ModEventEmailData>;
165#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
166#[serde(rename_all = "camelCase")]
167pub struct ModEventEscalateData {
168    #[serde(skip_serializing_if = "core::option::Option::is_none")]
169    pub comment: core::option::Option<String>,
170}
171pub type ModEventEscalate = crate::types::Object<ModEventEscalateData>;
172///Apply/Negate labels on a subject
173#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
174#[serde(rename_all = "camelCase")]
175pub struct ModEventLabelData {
176    #[serde(skip_serializing_if = "core::option::Option::is_none")]
177    pub comment: core::option::Option<String>,
178    pub create_label_vals: Vec<String>,
179    ///Indicates how long the label will remain on the subject. Only applies on labels that are being added.
180    #[serde(skip_serializing_if = "core::option::Option::is_none")]
181    pub duration_in_hours: core::option::Option<i64>,
182    pub negate_label_vals: Vec<String>,
183}
184pub type ModEventLabel = crate::types::Object<ModEventLabelData>;
185///Mute incoming reports on a subject
186#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
187#[serde(rename_all = "camelCase")]
188pub struct ModEventMuteData {
189    #[serde(skip_serializing_if = "core::option::Option::is_none")]
190    pub comment: core::option::Option<String>,
191    ///Indicates how long the subject should remain muted.
192    pub duration_in_hours: i64,
193}
194pub type ModEventMute = crate::types::Object<ModEventMuteData>;
195///Mute incoming reports from an account
196#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
197#[serde(rename_all = "camelCase")]
198pub struct ModEventMuteReporterData {
199    #[serde(skip_serializing_if = "core::option::Option::is_none")]
200    pub comment: core::option::Option<String>,
201    ///Indicates how long the account should remain muted. Falsy value here means a permanent mute.
202    #[serde(skip_serializing_if = "core::option::Option::is_none")]
203    pub duration_in_hours: core::option::Option<i64>,
204}
205pub type ModEventMuteReporter = crate::types::Object<ModEventMuteReporterData>;
206///Set priority score of the subject. Higher score means higher priority.
207#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
208#[serde(rename_all = "camelCase")]
209pub struct ModEventPriorityScoreData {
210    #[serde(skip_serializing_if = "core::option::Option::is_none")]
211    pub comment: core::option::Option<String>,
212    pub score: crate::types::LimitedU8<100u8>,
213}
214pub type ModEventPriorityScore = crate::types::Object<ModEventPriorityScoreData>;
215///Report a subject
216#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
217#[serde(rename_all = "camelCase")]
218pub struct ModEventReportData {
219    #[serde(skip_serializing_if = "core::option::Option::is_none")]
220    pub comment: core::option::Option<String>,
221    ///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.
222    #[serde(skip_serializing_if = "core::option::Option::is_none")]
223    pub is_reporter_muted: core::option::Option<bool>,
224    pub report_type: crate::com::atproto::moderation::defs::ReasonType,
225}
226pub type ModEventReport = crate::types::Object<ModEventReportData>;
227///Resolve appeal on a subject
228#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
229#[serde(rename_all = "camelCase")]
230pub struct ModEventResolveAppealData {
231    ///Describe resolution.
232    #[serde(skip_serializing_if = "core::option::Option::is_none")]
233    pub comment: core::option::Option<String>,
234}
235pub type ModEventResolveAppeal = crate::types::Object<ModEventResolveAppealData>;
236///Revert take down action on a subject
237#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
238#[serde(rename_all = "camelCase")]
239pub struct ModEventReverseTakedownData {
240    ///Describe reasoning behind the reversal.
241    #[serde(skip_serializing_if = "core::option::Option::is_none")]
242    pub comment: core::option::Option<String>,
243}
244pub type ModEventReverseTakedown = crate::types::Object<ModEventReverseTakedownData>;
245///Add/Remove a tag on a subject
246#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
247#[serde(rename_all = "camelCase")]
248pub struct ModEventTagData {
249    ///Tags to be added to the subject. If already exists, won't be duplicated.
250    pub add: Vec<String>,
251    ///Additional comment about added/removed tags.
252    #[serde(skip_serializing_if = "core::option::Option::is_none")]
253    pub comment: core::option::Option<String>,
254    ///Tags to be removed to the subject. Ignores a tag If it doesn't exist, won't be duplicated.
255    pub remove: Vec<String>,
256}
257pub type ModEventTag = crate::types::Object<ModEventTagData>;
258///Take down a subject permanently or temporarily
259#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
260#[serde(rename_all = "camelCase")]
261pub struct ModEventTakedownData {
262    ///If true, all other reports on content authored by this account will be resolved (acknowledged).
263    #[serde(skip_serializing_if = "core::option::Option::is_none")]
264    pub acknowledge_account_subjects: core::option::Option<bool>,
265    #[serde(skip_serializing_if = "core::option::Option::is_none")]
266    pub comment: core::option::Option<String>,
267    ///Indicates how long the takedown should be in effect before automatically expiring.
268    #[serde(skip_serializing_if = "core::option::Option::is_none")]
269    pub duration_in_hours: core::option::Option<i64>,
270    ///Names/Keywords of the policies that drove the decision.
271    #[serde(skip_serializing_if = "core::option::Option::is_none")]
272    pub policies: core::option::Option<Vec<String>>,
273}
274pub type ModEventTakedown = crate::types::Object<ModEventTakedownData>;
275///Unmute action on a subject
276#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
277#[serde(rename_all = "camelCase")]
278pub struct ModEventUnmuteData {
279    ///Describe reasoning behind the reversal.
280    #[serde(skip_serializing_if = "core::option::Option::is_none")]
281    pub comment: core::option::Option<String>,
282}
283pub type ModEventUnmute = crate::types::Object<ModEventUnmuteData>;
284///Unmute incoming reports from an account
285#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
286#[serde(rename_all = "camelCase")]
287pub struct ModEventUnmuteReporterData {
288    ///Describe reasoning behind the reversal.
289    #[serde(skip_serializing_if = "core::option::Option::is_none")]
290    pub comment: core::option::Option<String>,
291}
292pub type ModEventUnmuteReporter = crate::types::Object<ModEventUnmuteReporterData>;
293#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
294#[serde(rename_all = "camelCase")]
295pub struct ModEventViewData {
296    pub created_at: crate::types::string::Datetime,
297    pub created_by: crate::types::string::Did,
298    #[serde(skip_serializing_if = "core::option::Option::is_none")]
299    pub creator_handle: core::option::Option<String>,
300    pub event: crate::types::Union<ModEventViewEventRefs>,
301    pub id: i64,
302    #[serde(skip_serializing_if = "core::option::Option::is_none")]
303    pub mod_tool: core::option::Option<ModTool>,
304    pub subject: crate::types::Union<ModEventViewSubjectRefs>,
305    pub subject_blob_cids: Vec<String>,
306    #[serde(skip_serializing_if = "core::option::Option::is_none")]
307    pub subject_handle: core::option::Option<String>,
308}
309pub type ModEventView = crate::types::Object<ModEventViewData>;
310#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
311#[serde(rename_all = "camelCase")]
312pub struct ModEventViewDetailData {
313    pub created_at: crate::types::string::Datetime,
314    pub created_by: crate::types::string::Did,
315    pub event: crate::types::Union<ModEventViewDetailEventRefs>,
316    pub id: i64,
317    #[serde(skip_serializing_if = "core::option::Option::is_none")]
318    pub mod_tool: core::option::Option<ModTool>,
319    pub subject: crate::types::Union<ModEventViewDetailSubjectRefs>,
320    pub subject_blobs: Vec<BlobView>,
321}
322pub type ModEventViewDetail = crate::types::Object<ModEventViewDetailData>;
323///Moderation tool information for tracing the source of the action
324#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
325#[serde(rename_all = "camelCase")]
326pub struct ModToolData {
327    ///Additional arbitrary metadata about the source
328    #[serde(skip_serializing_if = "core::option::Option::is_none")]
329    pub meta: core::option::Option<crate::types::Unknown>,
330    ///Name/identifier of the source (e.g., 'automod', 'ozone/workspace')
331    pub name: String,
332}
333pub type ModTool = crate::types::Object<ModToolData>;
334#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
335#[serde(rename_all = "camelCase")]
336pub struct ModerationData {
337    #[serde(skip_serializing_if = "core::option::Option::is_none")]
338    pub subject_status: core::option::Option<SubjectStatusView>,
339}
340pub type Moderation = crate::types::Object<ModerationData>;
341#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
342#[serde(rename_all = "camelCase")]
343pub struct ModerationDetailData {
344    #[serde(skip_serializing_if = "core::option::Option::is_none")]
345    pub subject_status: core::option::Option<SubjectStatusView>,
346}
347pub type ModerationDetail = crate::types::Object<ModerationDetailData>;
348///Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
349#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
350#[serde(rename_all = "camelCase")]
351pub struct RecordEventData {
352    #[serde(skip_serializing_if = "core::option::Option::is_none")]
353    pub cid: core::option::Option<crate::types::string::Cid>,
354    #[serde(skip_serializing_if = "core::option::Option::is_none")]
355    pub comment: core::option::Option<String>,
356    pub op: String,
357    pub timestamp: crate::types::string::Datetime,
358}
359pub type RecordEvent = crate::types::Object<RecordEventData>;
360#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
361#[serde(rename_all = "camelCase")]
362pub struct RecordHostingData {
363    #[serde(skip_serializing_if = "core::option::Option::is_none")]
364    pub created_at: core::option::Option<crate::types::string::Datetime>,
365    #[serde(skip_serializing_if = "core::option::Option::is_none")]
366    pub deleted_at: core::option::Option<crate::types::string::Datetime>,
367    pub status: String,
368    #[serde(skip_serializing_if = "core::option::Option::is_none")]
369    pub updated_at: core::option::Option<crate::types::string::Datetime>,
370}
371pub type RecordHosting = crate::types::Object<RecordHostingData>;
372#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
373#[serde(rename_all = "camelCase")]
374pub struct RecordViewData {
375    pub blob_cids: Vec<crate::types::string::Cid>,
376    pub cid: crate::types::string::Cid,
377    pub indexed_at: crate::types::string::Datetime,
378    pub moderation: Moderation,
379    pub repo: RepoView,
380    pub uri: String,
381    pub value: crate::types::Unknown,
382}
383pub type RecordView = crate::types::Object<RecordViewData>;
384#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
385#[serde(rename_all = "camelCase")]
386pub struct RecordViewDetailData {
387    pub blobs: Vec<BlobView>,
388    pub cid: crate::types::string::Cid,
389    pub indexed_at: crate::types::string::Datetime,
390    #[serde(skip_serializing_if = "core::option::Option::is_none")]
391    pub labels: core::option::Option<Vec<crate::com::atproto::label::defs::Label>>,
392    pub moderation: ModerationDetail,
393    pub repo: RepoView,
394    pub uri: String,
395    pub value: crate::types::Unknown,
396}
397pub type RecordViewDetail = crate::types::Object<RecordViewDetailData>;
398#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
399#[serde(rename_all = "camelCase")]
400pub struct RecordViewNotFoundData {
401    pub uri: String,
402}
403pub type RecordViewNotFound = crate::types::Object<RecordViewNotFoundData>;
404///Statistics about a set of record subject items
405#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
406#[serde(rename_all = "camelCase")]
407pub struct RecordsStatsData {
408    ///Number of items that were appealed at least once
409    #[serde(skip_serializing_if = "core::option::Option::is_none")]
410    pub appealed_count: core::option::Option<i64>,
411    ///Number of items that were escalated at least once
412    #[serde(skip_serializing_if = "core::option::Option::is_none")]
413    pub escalated_count: core::option::Option<i64>,
414    ///Number of item currently in "reviewOpen" or "reviewEscalated" state
415    #[serde(skip_serializing_if = "core::option::Option::is_none")]
416    pub pending_count: core::option::Option<i64>,
417    ///Number of item currently in "reviewNone" or "reviewClosed" state
418    #[serde(skip_serializing_if = "core::option::Option::is_none")]
419    pub processed_count: core::option::Option<i64>,
420    ///Number of items that were reported at least once
421    #[serde(skip_serializing_if = "core::option::Option::is_none")]
422    pub reported_count: core::option::Option<i64>,
423    ///Total number of item in the set
424    #[serde(skip_serializing_if = "core::option::Option::is_none")]
425    pub subject_count: core::option::Option<i64>,
426    ///Number of item currently taken down
427    #[serde(skip_serializing_if = "core::option::Option::is_none")]
428    pub takendown_count: core::option::Option<i64>,
429    ///Cumulative sum of the number of reports on the items in the set
430    #[serde(skip_serializing_if = "core::option::Option::is_none")]
431    pub total_reports: core::option::Option<i64>,
432}
433pub type RecordsStats = crate::types::Object<RecordsStatsData>;
434#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
435#[serde(rename_all = "camelCase")]
436pub struct RepoViewData {
437    #[serde(skip_serializing_if = "core::option::Option::is_none")]
438    pub deactivated_at: core::option::Option<crate::types::string::Datetime>,
439    pub did: crate::types::string::Did,
440    #[serde(skip_serializing_if = "core::option::Option::is_none")]
441    pub email: core::option::Option<String>,
442    pub handle: crate::types::string::Handle,
443    pub indexed_at: crate::types::string::Datetime,
444    #[serde(skip_serializing_if = "core::option::Option::is_none")]
445    pub invite_note: core::option::Option<String>,
446    #[serde(skip_serializing_if = "core::option::Option::is_none")]
447    pub invited_by: core::option::Option<crate::com::atproto::server::defs::InviteCode>,
448    #[serde(skip_serializing_if = "core::option::Option::is_none")]
449    pub invites_disabled: core::option::Option<bool>,
450    pub moderation: Moderation,
451    pub related_records: Vec<crate::types::Unknown>,
452    #[serde(skip_serializing_if = "core::option::Option::is_none")]
453    pub threat_signatures:
454        core::option::Option<Vec<crate::com::atproto::admin::defs::ThreatSignature>>,
455}
456pub type RepoView = crate::types::Object<RepoViewData>;
457#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
458#[serde(rename_all = "camelCase")]
459pub struct RepoViewDetailData {
460    #[serde(skip_serializing_if = "core::option::Option::is_none")]
461    pub deactivated_at: core::option::Option<crate::types::string::Datetime>,
462    pub did: crate::types::string::Did,
463    #[serde(skip_serializing_if = "core::option::Option::is_none")]
464    pub email: core::option::Option<String>,
465    #[serde(skip_serializing_if = "core::option::Option::is_none")]
466    pub email_confirmed_at: core::option::Option<crate::types::string::Datetime>,
467    pub handle: crate::types::string::Handle,
468    pub indexed_at: crate::types::string::Datetime,
469    #[serde(skip_serializing_if = "core::option::Option::is_none")]
470    pub invite_note: core::option::Option<String>,
471    #[serde(skip_serializing_if = "core::option::Option::is_none")]
472    pub invited_by: core::option::Option<crate::com::atproto::server::defs::InviteCode>,
473    #[serde(skip_serializing_if = "core::option::Option::is_none")]
474    pub invites: core::option::Option<Vec<crate::com::atproto::server::defs::InviteCode>>,
475    #[serde(skip_serializing_if = "core::option::Option::is_none")]
476    pub invites_disabled: core::option::Option<bool>,
477    #[serde(skip_serializing_if = "core::option::Option::is_none")]
478    pub labels: core::option::Option<Vec<crate::com::atproto::label::defs::Label>>,
479    pub moderation: ModerationDetail,
480    pub related_records: Vec<crate::types::Unknown>,
481    #[serde(skip_serializing_if = "core::option::Option::is_none")]
482    pub threat_signatures:
483        core::option::Option<Vec<crate::com::atproto::admin::defs::ThreatSignature>>,
484}
485pub type RepoViewDetail = crate::types::Object<RepoViewDetailData>;
486#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
487#[serde(rename_all = "camelCase")]
488pub struct RepoViewNotFoundData {
489    pub did: crate::types::string::Did,
490}
491pub type RepoViewNotFound = crate::types::Object<RepoViewNotFoundData>;
492#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
493#[serde(rename_all = "camelCase")]
494pub struct ReporterStatsData {
495    ///The total number of reports made by the user on accounts.
496    pub account_report_count: i64,
497    pub did: crate::types::string::Did,
498    ///The total number of accounts labeled as a result of the user's reports.
499    pub labeled_account_count: i64,
500    ///The total number of records labeled as a result of the user's reports.
501    pub labeled_record_count: i64,
502    ///The total number of reports made by the user on records.
503    pub record_report_count: i64,
504    ///The total number of accounts reported by the user.
505    pub reported_account_count: i64,
506    ///The total number of records reported by the user.
507    pub reported_record_count: i64,
508    ///The total number of accounts taken down as a result of the user's reports.
509    pub takendown_account_count: i64,
510    ///The total number of records taken down as a result of the user's reports.
511    pub takendown_record_count: i64,
512}
513pub type ReporterStats = crate::types::Object<ReporterStatsData>;
514///Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator
515pub const REVIEW_CLOSED: &str = "tools.ozone.moderation.defs#reviewClosed";
516///Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator
517pub const REVIEW_ESCALATED: &str = "tools.ozone.moderation.defs#reviewEscalated";
518///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
519pub const REVIEW_NONE: &str = "tools.ozone.moderation.defs#reviewNone";
520///Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator
521pub const REVIEW_OPEN: &str = "tools.ozone.moderation.defs#reviewOpen";
522///Account credentials revocation by moderators. Only works on DID subjects.
523#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
524#[serde(rename_all = "camelCase")]
525pub struct RevokeAccountCredentialsEventData {
526    ///Comment describing the reason for the revocation.
527    pub comment: String,
528}
529pub type RevokeAccountCredentialsEvent = crate::types::Object<RevokeAccountCredentialsEventData>;
530pub type SubjectReviewState = String;
531#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
532#[serde(rename_all = "camelCase")]
533pub struct SubjectStatusViewData {
534    ///Statistics related to the account subject
535    #[serde(skip_serializing_if = "core::option::Option::is_none")]
536    pub account_stats: core::option::Option<AccountStats>,
537    ///Current age assurance state of the subject.
538    #[serde(skip_serializing_if = "core::option::Option::is_none")]
539    pub age_assurance_state: core::option::Option<String>,
540    ///Whether or not the last successful update to age assurance was made by the user or admin.
541    #[serde(skip_serializing_if = "core::option::Option::is_none")]
542    pub age_assurance_updated_by: core::option::Option<String>,
543    ///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.
544    #[serde(skip_serializing_if = "core::option::Option::is_none")]
545    pub appealed: core::option::Option<bool>,
546    ///Sticky comment on the subject.
547    #[serde(skip_serializing_if = "core::option::Option::is_none")]
548    pub comment: core::option::Option<String>,
549    ///Timestamp referencing the first moderation status impacting event was emitted on the subject
550    pub created_at: crate::types::string::Datetime,
551    #[serde(skip_serializing_if = "core::option::Option::is_none")]
552    pub hosting: core::option::Option<crate::types::Union<SubjectStatusViewHostingRefs>>,
553    pub id: i64,
554    ///Timestamp referencing when the author of the subject appealed a moderation action
555    #[serde(skip_serializing_if = "core::option::Option::is_none")]
556    pub last_appealed_at: core::option::Option<crate::types::string::Datetime>,
557    #[serde(skip_serializing_if = "core::option::Option::is_none")]
558    pub last_reported_at: core::option::Option<crate::types::string::Datetime>,
559    #[serde(skip_serializing_if = "core::option::Option::is_none")]
560    pub last_reviewed_at: core::option::Option<crate::types::string::Datetime>,
561    #[serde(skip_serializing_if = "core::option::Option::is_none")]
562    pub last_reviewed_by: core::option::Option<crate::types::string::Did>,
563    #[serde(skip_serializing_if = "core::option::Option::is_none")]
564    pub mute_reporting_until: core::option::Option<crate::types::string::Datetime>,
565    #[serde(skip_serializing_if = "core::option::Option::is_none")]
566    pub mute_until: core::option::Option<crate::types::string::Datetime>,
567    ///Numeric value representing the level of priority. Higher score means higher priority.
568    #[serde(skip_serializing_if = "core::option::Option::is_none")]
569    pub priority_score: core::option::Option<crate::types::LimitedU8<100u8>>,
570    ///Statistics related to the record subjects authored by the subject's account
571    #[serde(skip_serializing_if = "core::option::Option::is_none")]
572    pub records_stats: core::option::Option<RecordsStats>,
573    pub review_state: SubjectReviewState,
574    pub subject: crate::types::Union<SubjectStatusViewSubjectRefs>,
575    #[serde(skip_serializing_if = "core::option::Option::is_none")]
576    pub subject_blob_cids: core::option::Option<Vec<crate::types::string::Cid>>,
577    #[serde(skip_serializing_if = "core::option::Option::is_none")]
578    pub subject_repo_handle: core::option::Option<String>,
579    #[serde(skip_serializing_if = "core::option::Option::is_none")]
580    pub suspend_until: core::option::Option<crate::types::string::Datetime>,
581    #[serde(skip_serializing_if = "core::option::Option::is_none")]
582    pub tags: core::option::Option<Vec<String>>,
583    #[serde(skip_serializing_if = "core::option::Option::is_none")]
584    pub takendown: core::option::Option<bool>,
585    ///Timestamp referencing when the last update was made to the moderation status of the subject
586    pub updated_at: crate::types::string::Datetime,
587}
588pub type SubjectStatusView = crate::types::Object<SubjectStatusViewData>;
589///Detailed view of a subject. For record subjects, the author's repo and profile will be returned.
590#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
591#[serde(rename_all = "camelCase")]
592pub struct SubjectViewData {
593    #[serde(skip_serializing_if = "core::option::Option::is_none")]
594    pub profile: core::option::Option<crate::types::Union<SubjectViewProfileRefs>>,
595    #[serde(skip_serializing_if = "core::option::Option::is_none")]
596    pub record: core::option::Option<RecordViewDetail>,
597    #[serde(skip_serializing_if = "core::option::Option::is_none")]
598    pub repo: core::option::Option<RepoViewDetail>,
599    #[serde(skip_serializing_if = "core::option::Option::is_none")]
600    pub status: core::option::Option<SubjectStatusView>,
601    pub subject: String,
602    pub r#type: crate::com::atproto::moderation::defs::SubjectType,
603}
604pub type SubjectView = crate::types::Object<SubjectViewData>;
605///Moderation event timeline event for a PLC create operation
606pub const TIMELINE_EVENT_PLC_CREATE: &str = "tools.ozone.moderation.defs#timelineEventPlcCreate";
607///Moderation event timeline event for generic PLC operation
608pub const TIMELINE_EVENT_PLC_OPERATION: &str =
609    "tools.ozone.moderation.defs#timelineEventPlcOperation";
610///Moderation event timeline event for a PLC tombstone operation
611pub const TIMELINE_EVENT_PLC_TOMBSTONE: &str =
612    "tools.ozone.moderation.defs#timelineEventPlcTombstone";
613#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
614#[serde(rename_all = "camelCase")]
615pub struct VideoDetailsData {
616    pub height: i64,
617    pub length: i64,
618    pub width: i64,
619}
620pub type VideoDetails = crate::types::Object<VideoDetailsData>;
621#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
622#[serde(tag = "$type")]
623pub enum BlobViewDetailsRefs {
624    #[serde(rename = "tools.ozone.moderation.defs#imageDetails")]
625    ImageDetails(Box<ImageDetails>),
626    #[serde(rename = "tools.ozone.moderation.defs#videoDetails")]
627    VideoDetails(Box<VideoDetails>),
628}
629#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
630#[serde(tag = "$type")]
631pub enum ModEventViewDetailEventRefs {
632    #[serde(rename = "tools.ozone.moderation.defs#modEventTakedown")]
633    ModEventTakedown(Box<ModEventTakedown>),
634    #[serde(rename = "tools.ozone.moderation.defs#modEventReverseTakedown")]
635    ModEventReverseTakedown(Box<ModEventReverseTakedown>),
636    #[serde(rename = "tools.ozone.moderation.defs#modEventComment")]
637    ModEventComment(Box<ModEventComment>),
638    #[serde(rename = "tools.ozone.moderation.defs#modEventReport")]
639    ModEventReport(Box<ModEventReport>),
640    #[serde(rename = "tools.ozone.moderation.defs#modEventLabel")]
641    ModEventLabel(Box<ModEventLabel>),
642    #[serde(rename = "tools.ozone.moderation.defs#modEventAcknowledge")]
643    ModEventAcknowledge(Box<ModEventAcknowledge>),
644    #[serde(rename = "tools.ozone.moderation.defs#modEventEscalate")]
645    ModEventEscalate(Box<ModEventEscalate>),
646    #[serde(rename = "tools.ozone.moderation.defs#modEventMute")]
647    ModEventMute(Box<ModEventMute>),
648    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmute")]
649    ModEventUnmute(Box<ModEventUnmute>),
650    #[serde(rename = "tools.ozone.moderation.defs#modEventMuteReporter")]
651    ModEventMuteReporter(Box<ModEventMuteReporter>),
652    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmuteReporter")]
653    ModEventUnmuteReporter(Box<ModEventUnmuteReporter>),
654    #[serde(rename = "tools.ozone.moderation.defs#modEventEmail")]
655    ModEventEmail(Box<ModEventEmail>),
656    #[serde(rename = "tools.ozone.moderation.defs#modEventResolveAppeal")]
657    ModEventResolveAppeal(Box<ModEventResolveAppeal>),
658    #[serde(rename = "tools.ozone.moderation.defs#modEventDivert")]
659    ModEventDivert(Box<ModEventDivert>),
660    #[serde(rename = "tools.ozone.moderation.defs#modEventTag")]
661    ModEventTag(Box<ModEventTag>),
662    #[serde(rename = "tools.ozone.moderation.defs#accountEvent")]
663    AccountEvent(Box<AccountEvent>),
664    #[serde(rename = "tools.ozone.moderation.defs#identityEvent")]
665    IdentityEvent(Box<IdentityEvent>),
666    #[serde(rename = "tools.ozone.moderation.defs#recordEvent")]
667    RecordEvent(Box<RecordEvent>),
668    #[serde(rename = "tools.ozone.moderation.defs#modEventPriorityScore")]
669    ModEventPriorityScore(Box<ModEventPriorityScore>),
670    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceEvent")]
671    AgeAssuranceEvent(Box<AgeAssuranceEvent>),
672    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent")]
673    AgeAssuranceOverrideEvent(Box<AgeAssuranceOverrideEvent>),
674    #[serde(rename = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent")]
675    RevokeAccountCredentialsEvent(Box<RevokeAccountCredentialsEvent>),
676}
677#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
678#[serde(tag = "$type")]
679pub enum ModEventViewDetailSubjectRefs {
680    #[serde(rename = "tools.ozone.moderation.defs#repoView")]
681    RepoView(Box<RepoView>),
682    #[serde(rename = "tools.ozone.moderation.defs#repoViewNotFound")]
683    RepoViewNotFound(Box<RepoViewNotFound>),
684    #[serde(rename = "tools.ozone.moderation.defs#recordView")]
685    RecordView(Box<RecordView>),
686    #[serde(rename = "tools.ozone.moderation.defs#recordViewNotFound")]
687    RecordViewNotFound(Box<RecordViewNotFound>),
688}
689#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
690#[serde(tag = "$type")]
691pub enum ModEventViewEventRefs {
692    #[serde(rename = "tools.ozone.moderation.defs#modEventTakedown")]
693    ModEventTakedown(Box<ModEventTakedown>),
694    #[serde(rename = "tools.ozone.moderation.defs#modEventReverseTakedown")]
695    ModEventReverseTakedown(Box<ModEventReverseTakedown>),
696    #[serde(rename = "tools.ozone.moderation.defs#modEventComment")]
697    ModEventComment(Box<ModEventComment>),
698    #[serde(rename = "tools.ozone.moderation.defs#modEventReport")]
699    ModEventReport(Box<ModEventReport>),
700    #[serde(rename = "tools.ozone.moderation.defs#modEventLabel")]
701    ModEventLabel(Box<ModEventLabel>),
702    #[serde(rename = "tools.ozone.moderation.defs#modEventAcknowledge")]
703    ModEventAcknowledge(Box<ModEventAcknowledge>),
704    #[serde(rename = "tools.ozone.moderation.defs#modEventEscalate")]
705    ModEventEscalate(Box<ModEventEscalate>),
706    #[serde(rename = "tools.ozone.moderation.defs#modEventMute")]
707    ModEventMute(Box<ModEventMute>),
708    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmute")]
709    ModEventUnmute(Box<ModEventUnmute>),
710    #[serde(rename = "tools.ozone.moderation.defs#modEventMuteReporter")]
711    ModEventMuteReporter(Box<ModEventMuteReporter>),
712    #[serde(rename = "tools.ozone.moderation.defs#modEventUnmuteReporter")]
713    ModEventUnmuteReporter(Box<ModEventUnmuteReporter>),
714    #[serde(rename = "tools.ozone.moderation.defs#modEventEmail")]
715    ModEventEmail(Box<ModEventEmail>),
716    #[serde(rename = "tools.ozone.moderation.defs#modEventResolveAppeal")]
717    ModEventResolveAppeal(Box<ModEventResolveAppeal>),
718    #[serde(rename = "tools.ozone.moderation.defs#modEventDivert")]
719    ModEventDivert(Box<ModEventDivert>),
720    #[serde(rename = "tools.ozone.moderation.defs#modEventTag")]
721    ModEventTag(Box<ModEventTag>),
722    #[serde(rename = "tools.ozone.moderation.defs#accountEvent")]
723    AccountEvent(Box<AccountEvent>),
724    #[serde(rename = "tools.ozone.moderation.defs#identityEvent")]
725    IdentityEvent(Box<IdentityEvent>),
726    #[serde(rename = "tools.ozone.moderation.defs#recordEvent")]
727    RecordEvent(Box<RecordEvent>),
728    #[serde(rename = "tools.ozone.moderation.defs#modEventPriorityScore")]
729    ModEventPriorityScore(Box<ModEventPriorityScore>),
730    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceEvent")]
731    AgeAssuranceEvent(Box<AgeAssuranceEvent>),
732    #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent")]
733    AgeAssuranceOverrideEvent(Box<AgeAssuranceOverrideEvent>),
734    #[serde(rename = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent")]
735    RevokeAccountCredentialsEvent(Box<RevokeAccountCredentialsEvent>),
736}
737#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
738#[serde(tag = "$type")]
739pub enum ModEventViewSubjectRefs {
740    #[serde(rename = "com.atproto.admin.defs#repoRef")]
741    ComAtprotoAdminDefsRepoRef(Box<crate::com::atproto::admin::defs::RepoRef>),
742    #[serde(rename = "com.atproto.repo.strongRef")]
743    ComAtprotoRepoStrongRefMain(Box<crate::com::atproto::repo::strong_ref::Main>),
744    #[serde(rename = "chat.bsky.convo.defs#messageRef")]
745    ChatBskyConvoDefsMessageRef(Box<crate::chat::bsky::convo::defs::MessageRef>),
746}
747#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
748#[serde(tag = "$type")]
749pub enum SubjectStatusViewHostingRefs {
750    #[serde(rename = "tools.ozone.moderation.defs#accountHosting")]
751    AccountHosting(Box<AccountHosting>),
752    #[serde(rename = "tools.ozone.moderation.defs#recordHosting")]
753    RecordHosting(Box<RecordHosting>),
754}
755#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
756#[serde(tag = "$type")]
757pub enum SubjectStatusViewSubjectRefs {
758    #[serde(rename = "com.atproto.admin.defs#repoRef")]
759    ComAtprotoAdminDefsRepoRef(Box<crate::com::atproto::admin::defs::RepoRef>),
760    #[serde(rename = "com.atproto.repo.strongRef")]
761    ComAtprotoRepoStrongRefMain(Box<crate::com::atproto::repo::strong_ref::Main>),
762    #[serde(rename = "chat.bsky.convo.defs#messageRef")]
763    ChatBskyConvoDefsMessageRef(Box<crate::chat::bsky::convo::defs::MessageRef>),
764}
765#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
766#[serde(tag = "$type")]
767pub enum SubjectViewProfileRefs {}