Skip to main content

proto_blue_api/generated/tools/ozone/moderation/
defs.rs

1// Generated by atproto-codegen. Do not edit.
2//! Lexicon: tools.ozone.moderation.defs
3
4use serde::{Deserialize, Serialize};
5
6/// Logs account status related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct AccountEvent {
10    pub active: bool,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub comment: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub status: Option<String>,
15    pub timestamp: String,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19#[serde(rename_all = "camelCase")]
20pub struct AccountHosting {
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub created_at: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub deactivated_at: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub deleted_at: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub reactivated_at: Option<String>,
29    pub status: String,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub updated_at: Option<String>,
32}
33
34/// Statistics about a particular account subject
35#[derive(Debug, Clone, Serialize, Deserialize)]
36#[serde(rename_all = "camelCase")]
37pub struct AccountStats {
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub appeal_count: Option<i64>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub escalate_count: Option<i64>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub report_count: Option<i64>,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub suspend_count: Option<i64>,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub takedown_count: Option<i64>,
48}
49
50/// Strike information for an account
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct AccountStrike {
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub active_strike_count: Option<i64>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub first_strike_at: Option<String>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub last_strike_at: Option<String>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub total_strike_count: Option<i64>,
62}
63
64/// Age assurance info coming directly from users. Only works on DID subjects.
65#[derive(Debug, Clone, Serialize, Deserialize)]
66#[serde(rename_all = "camelCase")]
67pub struct AgeAssuranceEvent {
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub access: Option<crate::app::bsky::ageassurance::defs::Access>,
70    pub attempt_id: String,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub complete_ip: Option<String>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub complete_ua: Option<String>,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub country_code: Option<String>,
77    pub created_at: String,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub init_ip: Option<String>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub init_ua: Option<String>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub region_code: Option<String>,
84    pub status: String,
85}
86
87/// Age assurance status override by moderators. Only works on DID subjects.
88#[derive(Debug, Clone, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct AgeAssuranceOverrideEvent {
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub access: Option<crate::app::bsky::ageassurance::defs::Access>,
93    pub comment: String,
94    pub status: String,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct BlobView {
100    pub cid: String,
101    pub created_at: String,
102    #[serde(skip_serializing_if = "Option::is_none")]
103    pub details: Option<serde_json::Value>,
104    pub mime_type: String,
105    #[serde(skip_serializing_if = "Option::is_none")]
106    pub moderation: Option<Moderation>,
107    pub size: i64,
108}
109
110/// Logs cancellation of a scheduled takedown action for an account.
111#[derive(Debug, Clone, Serialize, Deserialize)]
112#[serde(rename_all = "camelCase")]
113pub struct CancelScheduledTakedownEvent {
114    #[serde(skip_serializing_if = "Option::is_none")]
115    pub comment: Option<String>,
116}
117
118/// Logs identity related events on a repo subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
119#[derive(Debug, Clone, Serialize, Deserialize)]
120#[serde(rename_all = "camelCase")]
121pub struct IdentityEvent {
122    #[serde(skip_serializing_if = "Option::is_none")]
123    pub comment: Option<String>,
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub handle: Option<String>,
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub pds_host: Option<String>,
128    pub timestamp: String,
129    #[serde(skip_serializing_if = "Option::is_none")]
130    pub tombstone: Option<bool>,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize)]
134#[serde(rename_all = "camelCase")]
135pub struct ImageDetails {
136    pub height: i64,
137    pub width: i64,
138}
139
140#[derive(Debug, Clone, Serialize, Deserialize)]
141#[serde(rename_all = "camelCase")]
142pub struct ModEventAcknowledge {
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub acknowledge_account_subjects: Option<bool>,
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub comment: Option<String>,
147}
148
149/// Add a comment to a subject. An empty comment will clear any previously set sticky comment.
150#[derive(Debug, Clone, Serialize, Deserialize)]
151#[serde(rename_all = "camelCase")]
152pub struct ModEventComment {
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub comment: Option<String>,
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub sticky: Option<bool>,
157}
158
159/// Divert a record's blobs to a 3rd party service for further scanning/tagging
160#[derive(Debug, Clone, Serialize, Deserialize)]
161#[serde(rename_all = "camelCase")]
162pub struct ModEventDivert {
163    #[serde(skip_serializing_if = "Option::is_none")]
164    pub comment: Option<String>,
165}
166
167/// Keep a log of outgoing email to a user
168#[derive(Debug, Clone, Serialize, Deserialize)]
169#[serde(rename_all = "camelCase")]
170pub struct ModEventEmail {
171    #[serde(skip_serializing_if = "Option::is_none")]
172    pub comment: Option<String>,
173    #[serde(skip_serializing_if = "Option::is_none")]
174    pub content: Option<String>,
175    #[serde(skip_serializing_if = "Option::is_none")]
176    pub is_delivered: Option<bool>,
177    #[serde(skip_serializing_if = "Option::is_none")]
178    pub policies: Option<Vec<String>>,
179    #[serde(skip_serializing_if = "Option::is_none")]
180    pub severity_level: Option<String>,
181    #[serde(skip_serializing_if = "Option::is_none")]
182    pub strike_count: Option<i64>,
183    #[serde(skip_serializing_if = "Option::is_none")]
184    pub strike_expires_at: Option<String>,
185    pub subject_line: String,
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize)]
189#[serde(rename_all = "camelCase")]
190pub struct ModEventEscalate {
191    #[serde(skip_serializing_if = "Option::is_none")]
192    pub comment: Option<String>,
193}
194
195/// Apply/Negate labels on a subject
196#[derive(Debug, Clone, Serialize, Deserialize)]
197#[serde(rename_all = "camelCase")]
198pub struct ModEventLabel {
199    #[serde(skip_serializing_if = "Option::is_none")]
200    pub comment: Option<String>,
201    pub create_label_vals: Vec<String>,
202    #[serde(skip_serializing_if = "Option::is_none")]
203    pub duration_in_hours: Option<i64>,
204    pub negate_label_vals: Vec<String>,
205}
206
207/// Mute incoming reports on a subject
208#[derive(Debug, Clone, Serialize, Deserialize)]
209#[serde(rename_all = "camelCase")]
210pub struct ModEventMute {
211    #[serde(skip_serializing_if = "Option::is_none")]
212    pub comment: Option<String>,
213    pub duration_in_hours: i64,
214}
215
216/// Mute incoming reports from an account
217#[derive(Debug, Clone, Serialize, Deserialize)]
218#[serde(rename_all = "camelCase")]
219pub struct ModEventMuteReporter {
220    #[serde(skip_serializing_if = "Option::is_none")]
221    pub comment: Option<String>,
222    #[serde(skip_serializing_if = "Option::is_none")]
223    pub duration_in_hours: Option<i64>,
224}
225
226/// Set priority score of the subject. Higher score means higher priority.
227#[derive(Debug, Clone, Serialize, Deserialize)]
228#[serde(rename_all = "camelCase")]
229pub struct ModEventPriorityScore {
230    #[serde(skip_serializing_if = "Option::is_none")]
231    pub comment: Option<String>,
232    pub score: i64,
233}
234
235/// Report a subject
236#[derive(Debug, Clone, Serialize, Deserialize)]
237#[serde(rename_all = "camelCase")]
238pub struct ModEventReport {
239    #[serde(skip_serializing_if = "Option::is_none")]
240    pub comment: Option<String>,
241    #[serde(skip_serializing_if = "Option::is_none")]
242    pub is_reporter_muted: Option<bool>,
243    pub report_type: crate::com::atproto::moderation::defs::ReasonType,
244}
245
246/// Resolve appeal on a subject
247#[derive(Debug, Clone, Serialize, Deserialize)]
248#[serde(rename_all = "camelCase")]
249pub struct ModEventResolveAppeal {
250    #[serde(skip_serializing_if = "Option::is_none")]
251    pub comment: Option<String>,
252}
253
254/// Revert take down action on a subject
255#[derive(Debug, Clone, Serialize, Deserialize)]
256#[serde(rename_all = "camelCase")]
257pub struct ModEventReverseTakedown {
258    #[serde(skip_serializing_if = "Option::is_none")]
259    pub comment: Option<String>,
260    #[serde(skip_serializing_if = "Option::is_none")]
261    pub policies: Option<Vec<String>>,
262    #[serde(skip_serializing_if = "Option::is_none")]
263    pub severity_level: Option<String>,
264    #[serde(skip_serializing_if = "Option::is_none")]
265    pub strike_count: Option<i64>,
266}
267
268/// Add/Remove a tag on a subject
269#[derive(Debug, Clone, Serialize, Deserialize)]
270#[serde(rename_all = "camelCase")]
271pub struct ModEventTag {
272    pub add: Vec<String>,
273    #[serde(skip_serializing_if = "Option::is_none")]
274    pub comment: Option<String>,
275    pub remove: Vec<String>,
276}
277
278/// Take down a subject permanently or temporarily
279#[derive(Debug, Clone, Serialize, Deserialize)]
280#[serde(rename_all = "camelCase")]
281pub struct ModEventTakedown {
282    #[serde(skip_serializing_if = "Option::is_none")]
283    pub acknowledge_account_subjects: Option<bool>,
284    #[serde(skip_serializing_if = "Option::is_none")]
285    pub comment: Option<String>,
286    #[serde(skip_serializing_if = "Option::is_none")]
287    pub duration_in_hours: Option<i64>,
288    #[serde(skip_serializing_if = "Option::is_none")]
289    pub policies: Option<Vec<String>>,
290    #[serde(skip_serializing_if = "Option::is_none")]
291    pub severity_level: Option<String>,
292    #[serde(skip_serializing_if = "Option::is_none")]
293    pub strike_count: Option<i64>,
294    #[serde(skip_serializing_if = "Option::is_none")]
295    pub strike_expires_at: Option<String>,
296    #[serde(skip_serializing_if = "Option::is_none")]
297    pub target_services: Option<Vec<String>>,
298}
299
300/// Unmute action on a subject
301#[derive(Debug, Clone, Serialize, Deserialize)]
302#[serde(rename_all = "camelCase")]
303pub struct ModEventUnmute {
304    #[serde(skip_serializing_if = "Option::is_none")]
305    pub comment: Option<String>,
306}
307
308/// Unmute incoming reports from an account
309#[derive(Debug, Clone, Serialize, Deserialize)]
310#[serde(rename_all = "camelCase")]
311pub struct ModEventUnmuteReporter {
312    #[serde(skip_serializing_if = "Option::is_none")]
313    pub comment: Option<String>,
314}
315
316#[derive(Debug, Clone, Serialize, Deserialize)]
317#[serde(rename_all = "camelCase")]
318pub struct ModEventView {
319    pub created_at: String,
320    pub created_by: String,
321    #[serde(skip_serializing_if = "Option::is_none")]
322    pub creator_handle: Option<String>,
323    pub event: serde_json::Value,
324    pub id: i64,
325    #[serde(skip_serializing_if = "Option::is_none")]
326    pub mod_tool: Option<ModTool>,
327    pub subject: serde_json::Value,
328    pub subject_blob_cids: Vec<String>,
329    #[serde(skip_serializing_if = "Option::is_none")]
330    pub subject_handle: Option<String>,
331}
332
333#[derive(Debug, Clone, Serialize, Deserialize)]
334#[serde(rename_all = "camelCase")]
335pub struct ModEventViewDetail {
336    pub created_at: String,
337    pub created_by: String,
338    pub event: serde_json::Value,
339    pub id: i64,
340    #[serde(skip_serializing_if = "Option::is_none")]
341    pub mod_tool: Option<ModTool>,
342    pub subject: serde_json::Value,
343    pub subject_blobs: Vec<BlobView>,
344}
345
346/// Moderation tool information for tracing the source of the action
347#[derive(Debug, Clone, Serialize, Deserialize)]
348#[serde(rename_all = "camelCase")]
349pub struct ModTool {
350    #[serde(skip_serializing_if = "Option::is_none")]
351    pub meta: Option<serde_json::Value>,
352    pub name: String,
353}
354
355#[derive(Debug, Clone, Serialize, Deserialize)]
356#[serde(rename_all = "camelCase")]
357pub struct Moderation {
358    #[serde(skip_serializing_if = "Option::is_none")]
359    pub subject_status: Option<SubjectStatusView>,
360}
361
362#[derive(Debug, Clone, Serialize, Deserialize)]
363#[serde(rename_all = "camelCase")]
364pub struct ModerationDetail {
365    #[serde(skip_serializing_if = "Option::is_none")]
366    pub subject_status: Option<SubjectStatusView>,
367}
368
369/// Logs lifecycle event on a record subject. Normally captured by automod from the firehose and emitted to ozone for historical tracking.
370#[derive(Debug, Clone, Serialize, Deserialize)]
371#[serde(rename_all = "camelCase")]
372pub struct RecordEvent {
373    #[serde(skip_serializing_if = "Option::is_none")]
374    pub cid: Option<String>,
375    #[serde(skip_serializing_if = "Option::is_none")]
376    pub comment: Option<String>,
377    pub op: String,
378    pub timestamp: String,
379}
380
381#[derive(Debug, Clone, Serialize, Deserialize)]
382#[serde(rename_all = "camelCase")]
383pub struct RecordHosting {
384    #[serde(skip_serializing_if = "Option::is_none")]
385    pub created_at: Option<String>,
386    #[serde(skip_serializing_if = "Option::is_none")]
387    pub deleted_at: Option<String>,
388    pub status: String,
389    #[serde(skip_serializing_if = "Option::is_none")]
390    pub updated_at: Option<String>,
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize)]
394#[serde(rename_all = "camelCase")]
395pub struct RecordView {
396    pub blob_cids: Vec<String>,
397    pub cid: String,
398    pub indexed_at: String,
399    pub moderation: Moderation,
400    pub repo: RepoView,
401    pub uri: String,
402    pub value: serde_json::Value,
403}
404
405#[derive(Debug, Clone, Serialize, Deserialize)]
406#[serde(rename_all = "camelCase")]
407pub struct RecordViewDetail {
408    pub blobs: Vec<BlobView>,
409    pub cid: String,
410    pub indexed_at: String,
411    #[serde(skip_serializing_if = "Option::is_none")]
412    pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
413    pub moderation: ModerationDetail,
414    pub repo: RepoView,
415    pub uri: String,
416    pub value: serde_json::Value,
417}
418
419#[derive(Debug, Clone, Serialize, Deserialize)]
420#[serde(rename_all = "camelCase")]
421pub struct RecordViewNotFound {
422    pub uri: String,
423}
424
425/// Statistics about a set of record subject items
426#[derive(Debug, Clone, Serialize, Deserialize)]
427#[serde(rename_all = "camelCase")]
428pub struct RecordsStats {
429    #[serde(skip_serializing_if = "Option::is_none")]
430    pub appealed_count: Option<i64>,
431    #[serde(skip_serializing_if = "Option::is_none")]
432    pub escalated_count: Option<i64>,
433    #[serde(skip_serializing_if = "Option::is_none")]
434    pub pending_count: Option<i64>,
435    #[serde(skip_serializing_if = "Option::is_none")]
436    pub processed_count: Option<i64>,
437    #[serde(skip_serializing_if = "Option::is_none")]
438    pub reported_count: Option<i64>,
439    #[serde(skip_serializing_if = "Option::is_none")]
440    pub subject_count: Option<i64>,
441    #[serde(skip_serializing_if = "Option::is_none")]
442    pub takendown_count: Option<i64>,
443    #[serde(skip_serializing_if = "Option::is_none")]
444    pub total_reports: Option<i64>,
445}
446
447#[derive(Debug, Clone, Serialize, Deserialize)]
448#[serde(rename_all = "camelCase")]
449pub struct RepoView {
450    #[serde(skip_serializing_if = "Option::is_none")]
451    pub deactivated_at: Option<String>,
452    pub did: String,
453    #[serde(skip_serializing_if = "Option::is_none")]
454    pub email: Option<String>,
455    pub handle: String,
456    pub indexed_at: String,
457    #[serde(skip_serializing_if = "Option::is_none")]
458    pub invite_note: Option<String>,
459    #[serde(skip_serializing_if = "Option::is_none")]
460    pub invited_by: Option<crate::com::atproto::server::defs::InviteCode>,
461    #[serde(skip_serializing_if = "Option::is_none")]
462    pub invites_disabled: Option<bool>,
463    pub moderation: Moderation,
464    pub related_records: Vec<serde_json::Value>,
465    #[serde(skip_serializing_if = "Option::is_none")]
466    pub threat_signatures: Option<Vec<crate::com::atproto::admin::defs::ThreatSignature>>,
467}
468
469#[derive(Debug, Clone, Serialize, Deserialize)]
470#[serde(rename_all = "camelCase")]
471pub struct RepoViewDetail {
472    #[serde(skip_serializing_if = "Option::is_none")]
473    pub deactivated_at: Option<String>,
474    pub did: String,
475    #[serde(skip_serializing_if = "Option::is_none")]
476    pub email: Option<String>,
477    #[serde(skip_serializing_if = "Option::is_none")]
478    pub email_confirmed_at: Option<String>,
479    pub handle: String,
480    pub indexed_at: String,
481    #[serde(skip_serializing_if = "Option::is_none")]
482    pub invite_note: Option<String>,
483    #[serde(skip_serializing_if = "Option::is_none")]
484    pub invited_by: Option<crate::com::atproto::server::defs::InviteCode>,
485    #[serde(skip_serializing_if = "Option::is_none")]
486    pub invites: Option<Vec<crate::com::atproto::server::defs::InviteCode>>,
487    #[serde(skip_serializing_if = "Option::is_none")]
488    pub invites_disabled: Option<bool>,
489    #[serde(skip_serializing_if = "Option::is_none")]
490    pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
491    pub moderation: ModerationDetail,
492    pub related_records: Vec<serde_json::Value>,
493    #[serde(skip_serializing_if = "Option::is_none")]
494    pub threat_signatures: Option<Vec<crate::com::atproto::admin::defs::ThreatSignature>>,
495}
496
497#[derive(Debug, Clone, Serialize, Deserialize)]
498#[serde(rename_all = "camelCase")]
499pub struct RepoViewNotFound {
500    pub did: String,
501}
502
503#[derive(Debug, Clone, Serialize, Deserialize)]
504#[serde(rename_all = "camelCase")]
505pub struct ReporterStats {
506    pub account_report_count: i64,
507    pub did: String,
508    pub labeled_account_count: i64,
509    pub labeled_record_count: i64,
510    pub record_report_count: i64,
511    pub reported_account_count: i64,
512    pub reported_record_count: i64,
513    pub takendown_account_count: i64,
514    pub takendown_record_count: i64,
515}
516
517/// Moderator review status of a subject: Closed. Indicates that the subject was already reviewed and resolved by a moderator
518pub const REVIEW_CLOSED: &str = "tools.ozone.moderation.defs#reviewClosed";
519
520/// Moderator review status of a subject: Escalated. Indicates that the subject was escalated for review by a moderator
521pub const REVIEW_ESCALATED: &str = "tools.ozone.moderation.defs#reviewEscalated";
522
523/// 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
524pub const REVIEW_NONE: &str = "tools.ozone.moderation.defs#reviewNone";
525
526/// Moderator review status of a subject: Open. Indicates that the subject needs to be reviewed by a moderator
527pub const REVIEW_OPEN: &str = "tools.ozone.moderation.defs#reviewOpen";
528
529/// Account credentials revocation by moderators. Only works on DID subjects.
530#[derive(Debug, Clone, Serialize, Deserialize)]
531#[serde(rename_all = "camelCase")]
532pub struct RevokeAccountCredentialsEvent {
533    pub comment: String,
534}
535
536/// Logs a scheduled takedown action for an account.
537#[derive(Debug, Clone, Serialize, Deserialize)]
538#[serde(rename_all = "camelCase")]
539pub struct ScheduleTakedownEvent {
540    #[serde(skip_serializing_if = "Option::is_none")]
541    pub comment: Option<String>,
542    #[serde(skip_serializing_if = "Option::is_none")]
543    pub execute_after: Option<String>,
544    #[serde(skip_serializing_if = "Option::is_none")]
545    pub execute_at: Option<String>,
546    #[serde(skip_serializing_if = "Option::is_none")]
547    pub execute_until: Option<String>,
548}
549
550/// View of a scheduled moderation action
551#[derive(Debug, Clone, Serialize, Deserialize)]
552#[serde(rename_all = "camelCase")]
553pub struct ScheduledActionView {
554    pub action: String,
555    pub created_at: String,
556    pub created_by: String,
557    pub did: String,
558    #[serde(skip_serializing_if = "Option::is_none")]
559    pub event_data: Option<serde_json::Value>,
560    #[serde(skip_serializing_if = "Option::is_none")]
561    pub execute_after: Option<String>,
562    #[serde(skip_serializing_if = "Option::is_none")]
563    pub execute_at: Option<String>,
564    #[serde(skip_serializing_if = "Option::is_none")]
565    pub execute_until: Option<String>,
566    #[serde(skip_serializing_if = "Option::is_none")]
567    pub execution_event_id: Option<i64>,
568    pub id: i64,
569    #[serde(skip_serializing_if = "Option::is_none")]
570    pub last_executed_at: Option<String>,
571    #[serde(skip_serializing_if = "Option::is_none")]
572    pub last_failure_reason: Option<String>,
573    #[serde(skip_serializing_if = "Option::is_none")]
574    pub randomize_execution: Option<bool>,
575    pub status: String,
576    #[serde(skip_serializing_if = "Option::is_none")]
577    pub updated_at: Option<String>,
578}
579
580pub type SubjectReviewState = String;
581pub const SubjectReviewState_REVIEW_OPEN: &str = "tools.ozone.moderation.defs#reviewOpen";
582pub const SubjectReviewState_REVIEW_ESCALATED: &str = "tools.ozone.moderation.defs#reviewEscalated";
583pub const SubjectReviewState_REVIEW_CLOSED: &str = "tools.ozone.moderation.defs#reviewClosed";
584pub const SubjectReviewState_REVIEW_NONE: &str = "tools.ozone.moderation.defs#reviewNone";
585
586#[derive(Debug, Clone, Serialize, Deserialize)]
587#[serde(rename_all = "camelCase")]
588pub struct SubjectStatusView {
589    #[serde(skip_serializing_if = "Option::is_none")]
590    pub account_stats: Option<AccountStats>,
591    #[serde(skip_serializing_if = "Option::is_none")]
592    pub account_strike: Option<AccountStrike>,
593    #[serde(skip_serializing_if = "Option::is_none")]
594    pub age_assurance_state: Option<String>,
595    #[serde(skip_serializing_if = "Option::is_none")]
596    pub age_assurance_updated_by: Option<String>,
597    #[serde(skip_serializing_if = "Option::is_none")]
598    pub appealed: Option<bool>,
599    #[serde(skip_serializing_if = "Option::is_none")]
600    pub comment: Option<String>,
601    pub created_at: String,
602    #[serde(skip_serializing_if = "Option::is_none")]
603    pub hosting: Option<serde_json::Value>,
604    pub id: i64,
605    #[serde(skip_serializing_if = "Option::is_none")]
606    pub last_appealed_at: Option<String>,
607    #[serde(skip_serializing_if = "Option::is_none")]
608    pub last_reported_at: Option<String>,
609    #[serde(skip_serializing_if = "Option::is_none")]
610    pub last_reviewed_at: Option<String>,
611    #[serde(skip_serializing_if = "Option::is_none")]
612    pub last_reviewed_by: Option<String>,
613    #[serde(skip_serializing_if = "Option::is_none")]
614    pub mute_reporting_until: Option<String>,
615    #[serde(skip_serializing_if = "Option::is_none")]
616    pub mute_until: Option<String>,
617    #[serde(skip_serializing_if = "Option::is_none")]
618    pub priority_score: Option<i64>,
619    #[serde(skip_serializing_if = "Option::is_none")]
620    pub records_stats: Option<RecordsStats>,
621    pub review_state: SubjectReviewState,
622    pub subject: serde_json::Value,
623    #[serde(skip_serializing_if = "Option::is_none")]
624    pub subject_blob_cids: Option<Vec<String>>,
625    #[serde(skip_serializing_if = "Option::is_none")]
626    pub subject_repo_handle: Option<String>,
627    #[serde(skip_serializing_if = "Option::is_none")]
628    pub suspend_until: Option<String>,
629    #[serde(skip_serializing_if = "Option::is_none")]
630    pub tags: Option<Vec<String>>,
631    #[serde(skip_serializing_if = "Option::is_none")]
632    pub takendown: Option<bool>,
633    pub updated_at: String,
634}
635
636/// Detailed view of a subject. For record subjects, the author's repo and profile will be returned.
637#[derive(Debug, Clone, Serialize, Deserialize)]
638#[serde(rename_all = "camelCase")]
639pub struct SubjectView {
640    #[serde(skip_serializing_if = "Option::is_none")]
641    pub profile: Option<serde_json::Value>,
642    #[serde(skip_serializing_if = "Option::is_none")]
643    pub record: Option<RecordViewDetail>,
644    #[serde(skip_serializing_if = "Option::is_none")]
645    pub repo: Option<RepoViewDetail>,
646    #[serde(skip_serializing_if = "Option::is_none")]
647    pub status: Option<SubjectStatusView>,
648    pub subject: String,
649    #[serde(rename = "type")]
650    pub r#type: crate::com::atproto::moderation::defs::SubjectType,
651}
652
653/// Moderation event timeline event for a PLC create operation
654pub const TIMELINE_EVENT_PLC_CREATE: &str = "tools.ozone.moderation.defs#timelineEventPlcCreate";
655
656/// Moderation event timeline event for generic PLC operation
657pub const TIMELINE_EVENT_PLC_OPERATION: &str = "tools.ozone.moderation.defs#timelineEventPlcOperation";
658
659/// Moderation event timeline event for a PLC tombstone operation
660pub const TIMELINE_EVENT_PLC_TOMBSTONE: &str = "tools.ozone.moderation.defs#timelineEventPlcTombstone";
661
662#[derive(Debug, Clone, Serialize, Deserialize)]
663#[serde(rename_all = "camelCase")]
664pub struct VideoDetails {
665    pub height: i64,
666    pub length: i64,
667    pub width: i64,
668}
669