1use serde::{Deserialize, Serialize};
5
6#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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#[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
517pub const REVIEW_CLOSED: &str = "tools.ozone.moderation.defs#reviewClosed";
519
520pub const REVIEW_ESCALATED: &str = "tools.ozone.moderation.defs#reviewEscalated";
522
523pub const REVIEW_NONE: &str = "tools.ozone.moderation.defs#reviewNone";
525
526pub const REVIEW_OPEN: &str = "tools.ozone.moderation.defs#reviewOpen";
528
529#[derive(Debug, Clone, Serialize, Deserialize)]
531#[serde(rename_all = "camelCase")]
532pub struct RevokeAccountCredentialsEvent {
533 pub comment: String,
534}
535
536#[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#[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#[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
653pub const TIMELINE_EVENT_PLC_CREATE: &str = "tools.ozone.moderation.defs#timelineEventPlcCreate";
655
656pub const TIMELINE_EVENT_PLC_OPERATION: &str =
658 "tools.ozone.moderation.defs#timelineEventPlcOperation";
659
660pub const TIMELINE_EVENT_PLC_TOMBSTONE: &str =
662 "tools.ozone.moderation.defs#timelineEventPlcTombstone";
663
664#[derive(Debug, Clone, Serialize, Deserialize)]
665#[serde(rename_all = "camelCase")]
666pub struct VideoDetails {
667 pub height: i64,
668 pub length: i64,
669 pub width: i64,
670}