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