Skip to main content

jacquard_api/chat_bsky/moderation/
subscribe_mod_events.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: chat.bsky.moderation.subscribeModEvents
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8#[allow(unused_imports)]
9use alloc::collections::BTreeMap;
10
11#[allow(unused_imports)]
12use core::marker::PhantomData;
13use jacquard_common::{BosStr, CowStr, DefaultStr, FromStaticStr};
14
15#[allow(unused_imports)]
16use jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation;
17use jacquard_common::deps::smol_str::SmolStr;
18use jacquard_common::types::string::{Datetime, Did};
19use jacquard_common::types::value::Data;
20use jacquard_derive::{IntoStatic, open_union};
21use jacquard_lexicon::lexicon::LexiconDoc;
22use jacquard_lexicon::schema::LexiconSchema;
23
24use crate::chat_bsky::moderation::subscribe_mod_events;
25#[allow(unused_imports)]
26use jacquard_lexicon::validation::{ConstraintError, ValidationPath};
27use serde::{Deserialize, Serialize};
28/// Fired when a user accepts a chat convo, either explicitly or by sending a message.
29
30#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
31#[serde(
32    rename_all = "camelCase",
33    bound(deserialize = "S: Deserialize<'de> + BosStr")
34)]
35pub struct EventChatAccepted<S: BosStr = DefaultStr> {
36    ///The DID of the person accepting the convo.
37    pub actor_did: Did<S>,
38    ///When the convo was originally created.
39    pub convo_created_at: Datetime,
40    pub convo_id: S,
41    pub created_at: Datetime,
42    ///Current member count at the time of the event. Only present for group convos.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub group_member_count: Option<i64>,
45    ///The name of the group chat. Only present for group convos.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub group_name: Option<S>,
48    ///How the convo was accepted.
49    pub method: EventChatAcceptedMethod<S>,
50    ///The DID of the group chat owner. Only present for group convos.
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub owner_did: Option<Did<S>>,
53    pub rev: S,
54    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
55    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
56}
57
58/// How the convo was accepted.
59
60#[derive(Debug, Clone, PartialEq, Eq, Hash)]
61pub enum EventChatAcceptedMethod<S: BosStr = DefaultStr> {
62    Explicit,
63    Message,
64    Other(S),
65}
66
67impl<S: BosStr> EventChatAcceptedMethod<S> {
68    pub fn as_str(&self) -> &str {
69        match self {
70            Self::Explicit => "explicit",
71            Self::Message => "message",
72            Self::Other(s) => s.as_ref(),
73        }
74    }
75    /// Construct from a string-like value, matching known values.
76    pub fn from_value(s: S) -> Self {
77        match s.as_ref() {
78            "explicit" => Self::Explicit,
79            "message" => Self::Message,
80            _ => Self::Other(s),
81        }
82    }
83}
84
85impl<S: BosStr> core::fmt::Display for EventChatAcceptedMethod<S> {
86    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
87        write!(f, "{}", self.as_str())
88    }
89}
90
91impl<S: BosStr> AsRef<str> for EventChatAcceptedMethod<S> {
92    fn as_ref(&self) -> &str {
93        self.as_str()
94    }
95}
96
97impl<S: BosStr> Serialize for EventChatAcceptedMethod<S> {
98    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
99    where
100        Ser: serde::Serializer,
101    {
102        serializer.serialize_str(self.as_str())
103    }
104}
105
106impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for EventChatAcceptedMethod<S> {
107    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
108    where
109        D: serde::Deserializer<'de>,
110    {
111        let s = S::deserialize(deserializer)?;
112        Ok(Self::from_value(s))
113    }
114}
115
116impl<S: BosStr + Default> Default for EventChatAcceptedMethod<S> {
117    fn default() -> Self {
118        Self::Other(Default::default())
119    }
120}
121
122impl<S: BosStr> jacquard_common::IntoStatic for EventChatAcceptedMethod<S>
123where
124    S: BosStr + jacquard_common::IntoStatic,
125    S::Output: BosStr,
126{
127    type Output = EventChatAcceptedMethod<S::Output>;
128    fn into_static(self) -> Self::Output {
129        match self {
130            EventChatAcceptedMethod::Explicit => EventChatAcceptedMethod::Explicit,
131            EventChatAcceptedMethod::Message => EventChatAcceptedMethod::Message,
132            EventChatAcceptedMethod::Other(v) => EventChatAcceptedMethod::Other(v.into_static()),
133        }
134    }
135}
136
137/// Fired when the first message was sent on a convo.
138
139#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
140#[serde(
141    rename_all = "camelCase",
142    bound(deserialize = "S: Deserialize<'de> + BosStr")
143)]
144pub struct EventConvoFirstMessage<S: BosStr = DefaultStr> {
145    pub convo_id: S,
146    pub created_at: Datetime,
147    #[serde(skip_serializing_if = "Option::is_none")]
148    pub message_id: Option<S>,
149    ///The list of DIDs message recipients. Does not include the sender, which is in the `user` field
150    pub recipients: Vec<Did<S>>,
151    pub rev: S,
152    ///The DID of the message author.
153    pub user: Did<S>,
154    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
155    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
156}
157
158/// Fire when a group chat is created.
159
160#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
161#[serde(
162    rename_all = "camelCase",
163    bound(deserialize = "S: Deserialize<'de> + BosStr")
164)]
165pub struct EventGroupChatCreated<S: BosStr = DefaultStr> {
166    ///The DID of the actor performing the action. For this event, same as ownerDid.
167    pub actor_did: Did<S>,
168    ///When the group was originally created.
169    pub convo_created_at: Datetime,
170    pub convo_id: S,
171    pub created_at: Datetime,
172    ///Current member count at the time of the event.
173    pub group_member_count: i64,
174    ///The name set at creation time.
175    pub group_name: S,
176    ///DIDs of everyone added at creation time.
177    pub initial_member_dids: Vec<Did<S>>,
178    ///The DID of the group chat owner.
179    pub owner_did: Did<S>,
180    pub rev: S,
181    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
182    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
183}
184
185/// Fired when a user requests to join a group chat via an join link that requires approval.
186
187#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
188#[serde(
189    rename_all = "camelCase",
190    bound(deserialize = "S: Deserialize<'de> + BosStr")
191)]
192pub struct EventGroupChatJoinRequest<S: BosStr = DefaultStr> {
193    ///The DID of the person requesting to join.
194    pub actor_did: Did<S>,
195    ///When the group was originally created.
196    pub convo_created_at: Datetime,
197    pub convo_id: S,
198    pub created_at: Datetime,
199    ///Current member count at the time of the event.
200    pub group_member_count: i64,
201    pub group_name: S,
202    ///The code of the join link used to request joining.
203    pub join_link_code: S,
204    ///The DID of the group chat owner.
205    pub owner_did: Did<S>,
206    pub rev: S,
207    ///Whether the requesting member follows the group owner.
208    pub subject_follows_owner: bool,
209    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
210    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
211}
212
213/// Fired when a join request is approved by the group owner.
214
215#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
216#[serde(
217    rename_all = "camelCase",
218    bound(deserialize = "S: Deserialize<'de> + BosStr")
219)]
220pub struct EventGroupChatJoinRequestApproved<S: BosStr = DefaultStr> {
221    ///The DID of the owner approving the request.
222    pub actor_did: Did<S>,
223    ///When the group was originally created.
224    pub convo_created_at: Datetime,
225    pub convo_id: S,
226    pub created_at: Datetime,
227    ///Current member count at the time of the event.
228    pub group_member_count: i64,
229    pub group_name: S,
230    ///The DID of the group chat owner.
231    pub owner_did: Did<S>,
232    pub rev: S,
233    ///The DID of the member whose request was approved.
234    pub subject_did: Did<S>,
235    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
236    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
237}
238
239/// Fired when a join request is rejected by the group owner.
240
241#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
242#[serde(
243    rename_all = "camelCase",
244    bound(deserialize = "S: Deserialize<'de> + BosStr")
245)]
246pub struct EventGroupChatJoinRequestRejected<S: BosStr = DefaultStr> {
247    ///The DID of the owner rejecting the request.
248    pub actor_did: Did<S>,
249    ///When the group was originally created.
250    pub convo_created_at: Datetime,
251    pub convo_id: S,
252    pub created_at: Datetime,
253    ///Current member count at the time of the event.
254    pub group_member_count: i64,
255    pub group_name: S,
256    ///The DID of the group chat owner.
257    pub owner_did: Did<S>,
258    pub rev: S,
259    ///The DID of the member whose request was rejected.
260    pub subject_did: Did<S>,
261    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
262    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
263}
264
265/// Fired when a member is added to a group chat. Note that members are added in the 'request' state.
266
267#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
268#[serde(
269    rename_all = "camelCase",
270    bound(deserialize = "S: Deserialize<'de> + BosStr")
271)]
272pub struct EventGroupChatMemberAdded<S: BosStr = DefaultStr> {
273    ///The DID of the actor performing the action. For this event, same as ownerDid.
274    pub actor_did: Did<S>,
275    ///When the group was originally created.
276    pub convo_created_at: Datetime,
277    pub convo_id: S,
278    pub created_at: Datetime,
279    ///Current member count at the time of the event.
280    pub group_member_count: i64,
281    pub group_name: S,
282    ///The DID of the group chat owner.
283    pub owner_did: Did<S>,
284    ///The number of members who have not yet accepted the convo.
285    pub request_members_count: i64,
286    pub rev: S,
287    ///The DID of the member who was added.
288    pub subject_did: Did<S>,
289    ///Whether the added member follows the group owner.
290    pub subject_follows_owner: bool,
291    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
292    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
293}
294
295/// Fired when a member joins a group chat via an join link that does not require approval.
296
297#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
298#[serde(
299    rename_all = "camelCase",
300    bound(deserialize = "S: Deserialize<'de> + BosStr")
301)]
302pub struct EventGroupChatMemberJoined<S: BosStr = DefaultStr> {
303    ///The DID of the person joining.
304    pub actor_did: Did<S>,
305    ///When the group was originally created.
306    pub convo_created_at: Datetime,
307    pub convo_id: S,
308    pub created_at: Datetime,
309    ///Current member count at the time of the event.
310    pub group_member_count: i64,
311    pub group_name: S,
312    ///The code of the join link used to join.
313    pub join_link_code: S,
314    ///The DID of the group chat owner.
315    pub owner_did: Did<S>,
316    pub rev: S,
317    ///Whether the joining member follows the group owner.
318    pub subject_follows_owner: bool,
319    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
320    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
321}
322
323/// Fired when a member leaves or is removed from a group chat.
324
325#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
326#[serde(
327    rename_all = "camelCase",
328    bound(deserialize = "S: Deserialize<'de> + BosStr")
329)]
330pub struct EventGroupChatMemberLeft<S: BosStr = DefaultStr> {
331    ///The DID of the actor. For voluntary: the person leaving. For kicked: the owner.
332    pub actor_did: Did<S>,
333    ///When the group was originally created.
334    pub convo_created_at: Datetime,
335    pub convo_id: S,
336    pub created_at: Datetime,
337    ///Current member count at the time of the event.
338    pub group_member_count: i64,
339    pub group_name: S,
340    ///How the member left.
341    pub leave_method: EventGroupChatMemberLeftLeaveMethod<S>,
342    ///The DID of the group chat owner.
343    pub owner_did: Did<S>,
344    pub rev: S,
345    ///The DID of the member who left or was removed.
346    pub subject_did: Did<S>,
347    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
348    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
349}
350
351/// How the member left.
352
353#[derive(Debug, Clone, PartialEq, Eq, Hash)]
354pub enum EventGroupChatMemberLeftLeaveMethod<S: BosStr = DefaultStr> {
355    Voluntary,
356    Kicked,
357    Other(S),
358}
359
360impl<S: BosStr> EventGroupChatMemberLeftLeaveMethod<S> {
361    pub fn as_str(&self) -> &str {
362        match self {
363            Self::Voluntary => "voluntary",
364            Self::Kicked => "kicked",
365            Self::Other(s) => s.as_ref(),
366        }
367    }
368    /// Construct from a string-like value, matching known values.
369    pub fn from_value(s: S) -> Self {
370        match s.as_ref() {
371            "voluntary" => Self::Voluntary,
372            "kicked" => Self::Kicked,
373            _ => Self::Other(s),
374        }
375    }
376}
377
378impl<S: BosStr> core::fmt::Display for EventGroupChatMemberLeftLeaveMethod<S> {
379    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
380        write!(f, "{}", self.as_str())
381    }
382}
383
384impl<S: BosStr> AsRef<str> for EventGroupChatMemberLeftLeaveMethod<S> {
385    fn as_ref(&self) -> &str {
386        self.as_str()
387    }
388}
389
390impl<S: BosStr> Serialize for EventGroupChatMemberLeftLeaveMethod<S> {
391    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
392    where
393        Ser: serde::Serializer,
394    {
395        serializer.serialize_str(self.as_str())
396    }
397}
398
399impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de>
400    for EventGroupChatMemberLeftLeaveMethod<S>
401{
402    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
403    where
404        D: serde::Deserializer<'de>,
405    {
406        let s = S::deserialize(deserializer)?;
407        Ok(Self::from_value(s))
408    }
409}
410
411impl<S: BosStr + Default> Default for EventGroupChatMemberLeftLeaveMethod<S> {
412    fn default() -> Self {
413        Self::Other(Default::default())
414    }
415}
416
417impl<S: BosStr> jacquard_common::IntoStatic for EventGroupChatMemberLeftLeaveMethod<S>
418where
419    S: BosStr + jacquard_common::IntoStatic,
420    S::Output: BosStr,
421{
422    type Output = EventGroupChatMemberLeftLeaveMethod<S::Output>;
423    fn into_static(self) -> Self::Output {
424        match self {
425            EventGroupChatMemberLeftLeaveMethod::Voluntary => {
426                EventGroupChatMemberLeftLeaveMethod::Voluntary
427            }
428            EventGroupChatMemberLeftLeaveMethod::Kicked => {
429                EventGroupChatMemberLeftLeaveMethod::Kicked
430            }
431            EventGroupChatMemberLeftLeaveMethod::Other(v) => {
432                EventGroupChatMemberLeftLeaveMethod::Other(v.into_static())
433            }
434        }
435    }
436}
437
438/// Fired when a group chat's metadata or status changes.
439
440#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
441#[serde(
442    rename_all = "camelCase",
443    bound(deserialize = "S: Deserialize<'de> + BosStr")
444)]
445pub struct EventGroupChatUpdated<S: BosStr = DefaultStr> {
446    ///The DID of the actor performing the action (the owner).
447    pub actor_did: Did<S>,
448    ///When the group was originally created.
449    pub convo_created_at: Datetime,
450    pub convo_id: S,
451    pub created_at: Datetime,
452    ///Current member count at the time of the event.
453    pub group_member_count: i64,
454    ///Current group name.
455    pub group_name: S,
456    ///The code of the join link. Only present when updateType is join-link-related.
457    #[serde(skip_serializing_if = "Option::is_none")]
458    pub join_link_code: Option<S>,
459    ///Whether the join link is restricted to followers of the owner. Only present when updateType is join-link-related.
460    #[serde(skip_serializing_if = "Option::is_none")]
461    pub join_link_followers_only: Option<bool>,
462    ///Whether the join link requires owner approval to join. Only present when updateType is join-link-related.
463    #[serde(skip_serializing_if = "Option::is_none")]
464    pub join_link_requires_approval: Option<bool>,
465    ///Why the group was locked. Only present when updateType is 'locked'.
466    #[serde(skip_serializing_if = "Option::is_none")]
467    pub lock_reason: Option<EventGroupChatUpdatedLockReason<S>>,
468    ///The new group name. Only present when updateType is 'name_changed'.
469    #[serde(skip_serializing_if = "Option::is_none")]
470    pub new_name: Option<S>,
471    ///The previous group name. Only present when updateType is 'name_changed'.
472    #[serde(skip_serializing_if = "Option::is_none")]
473    pub old_name: Option<S>,
474    ///The DID of the group chat owner.
475    pub owner_did: Did<S>,
476    pub rev: S,
477    ///What changed.
478    pub update_type: EventGroupChatUpdatedUpdateType<S>,
479    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
480    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
481}
482
483/// Why the group was locked. Only present when updateType is 'locked'.
484
485#[derive(Debug, Clone, PartialEq, Eq, Hash)]
486pub enum EventGroupChatUpdatedLockReason<S: BosStr = DefaultStr> {
487    OwnerAction,
488    OwnerLeft,
489    OwnerDeactivated,
490    OwnerDeleted,
491    OwnerSuspended,
492    OwnerTakenDown,
493    LabelApplied,
494    ConvoTakenDown,
495    Other(S),
496}
497
498impl<S: BosStr> EventGroupChatUpdatedLockReason<S> {
499    pub fn as_str(&self) -> &str {
500        match self {
501            Self::OwnerAction => "owner_action",
502            Self::OwnerLeft => "owner_left",
503            Self::OwnerDeactivated => "owner_deactivated",
504            Self::OwnerDeleted => "owner_deleted",
505            Self::OwnerSuspended => "owner_suspended",
506            Self::OwnerTakenDown => "owner_taken_down",
507            Self::LabelApplied => "label_applied",
508            Self::ConvoTakenDown => "convo_taken_down",
509            Self::Other(s) => s.as_ref(),
510        }
511    }
512    /// Construct from a string-like value, matching known values.
513    pub fn from_value(s: S) -> Self {
514        match s.as_ref() {
515            "owner_action" => Self::OwnerAction,
516            "owner_left" => Self::OwnerLeft,
517            "owner_deactivated" => Self::OwnerDeactivated,
518            "owner_deleted" => Self::OwnerDeleted,
519            "owner_suspended" => Self::OwnerSuspended,
520            "owner_taken_down" => Self::OwnerTakenDown,
521            "label_applied" => Self::LabelApplied,
522            "convo_taken_down" => Self::ConvoTakenDown,
523            _ => Self::Other(s),
524        }
525    }
526}
527
528impl<S: BosStr> core::fmt::Display for EventGroupChatUpdatedLockReason<S> {
529    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
530        write!(f, "{}", self.as_str())
531    }
532}
533
534impl<S: BosStr> AsRef<str> for EventGroupChatUpdatedLockReason<S> {
535    fn as_ref(&self) -> &str {
536        self.as_str()
537    }
538}
539
540impl<S: BosStr> Serialize for EventGroupChatUpdatedLockReason<S> {
541    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
542    where
543        Ser: serde::Serializer,
544    {
545        serializer.serialize_str(self.as_str())
546    }
547}
548
549impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for EventGroupChatUpdatedLockReason<S> {
550    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
551    where
552        D: serde::Deserializer<'de>,
553    {
554        let s = S::deserialize(deserializer)?;
555        Ok(Self::from_value(s))
556    }
557}
558
559impl<S: BosStr + Default> Default for EventGroupChatUpdatedLockReason<S> {
560    fn default() -> Self {
561        Self::Other(Default::default())
562    }
563}
564
565impl<S: BosStr> jacquard_common::IntoStatic for EventGroupChatUpdatedLockReason<S>
566where
567    S: BosStr + jacquard_common::IntoStatic,
568    S::Output: BosStr,
569{
570    type Output = EventGroupChatUpdatedLockReason<S::Output>;
571    fn into_static(self) -> Self::Output {
572        match self {
573            EventGroupChatUpdatedLockReason::OwnerAction => {
574                EventGroupChatUpdatedLockReason::OwnerAction
575            }
576            EventGroupChatUpdatedLockReason::OwnerLeft => {
577                EventGroupChatUpdatedLockReason::OwnerLeft
578            }
579            EventGroupChatUpdatedLockReason::OwnerDeactivated => {
580                EventGroupChatUpdatedLockReason::OwnerDeactivated
581            }
582            EventGroupChatUpdatedLockReason::OwnerDeleted => {
583                EventGroupChatUpdatedLockReason::OwnerDeleted
584            }
585            EventGroupChatUpdatedLockReason::OwnerSuspended => {
586                EventGroupChatUpdatedLockReason::OwnerSuspended
587            }
588            EventGroupChatUpdatedLockReason::OwnerTakenDown => {
589                EventGroupChatUpdatedLockReason::OwnerTakenDown
590            }
591            EventGroupChatUpdatedLockReason::LabelApplied => {
592                EventGroupChatUpdatedLockReason::LabelApplied
593            }
594            EventGroupChatUpdatedLockReason::ConvoTakenDown => {
595                EventGroupChatUpdatedLockReason::ConvoTakenDown
596            }
597            EventGroupChatUpdatedLockReason::Other(v) => {
598                EventGroupChatUpdatedLockReason::Other(v.into_static())
599            }
600        }
601    }
602}
603
604/// What changed.
605
606#[derive(Debug, Clone, PartialEq, Eq, Hash)]
607pub enum EventGroupChatUpdatedUpdateType<S: BosStr = DefaultStr> {
608    NameChanged,
609    Locked,
610    LockedPermanently,
611    Unlocked,
612    JoinLinkCreated,
613    JoinLinkDisabled,
614    JoinLinkSettingsChanged,
615    Other(S),
616}
617
618impl<S: BosStr> EventGroupChatUpdatedUpdateType<S> {
619    pub fn as_str(&self) -> &str {
620        match self {
621            Self::NameChanged => "name_changed",
622            Self::Locked => "locked",
623            Self::LockedPermanently => "locked_permanently",
624            Self::Unlocked => "unlocked",
625            Self::JoinLinkCreated => "join_link_created",
626            Self::JoinLinkDisabled => "join_link_disabled",
627            Self::JoinLinkSettingsChanged => "join_link_settings_changed",
628            Self::Other(s) => s.as_ref(),
629        }
630    }
631    /// Construct from a string-like value, matching known values.
632    pub fn from_value(s: S) -> Self {
633        match s.as_ref() {
634            "name_changed" => Self::NameChanged,
635            "locked" => Self::Locked,
636            "locked_permanently" => Self::LockedPermanently,
637            "unlocked" => Self::Unlocked,
638            "join_link_created" => Self::JoinLinkCreated,
639            "join_link_disabled" => Self::JoinLinkDisabled,
640            "join_link_settings_changed" => Self::JoinLinkSettingsChanged,
641            _ => Self::Other(s),
642        }
643    }
644}
645
646impl<S: BosStr> core::fmt::Display for EventGroupChatUpdatedUpdateType<S> {
647    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
648        write!(f, "{}", self.as_str())
649    }
650}
651
652impl<S: BosStr> AsRef<str> for EventGroupChatUpdatedUpdateType<S> {
653    fn as_ref(&self) -> &str {
654        self.as_str()
655    }
656}
657
658impl<S: BosStr> Serialize for EventGroupChatUpdatedUpdateType<S> {
659    fn serialize<Ser>(&self, serializer: Ser) -> Result<Ser::Ok, Ser::Error>
660    where
661        Ser: serde::Serializer,
662    {
663        serializer.serialize_str(self.as_str())
664    }
665}
666
667impl<'de, S: Deserialize<'de> + BosStr> Deserialize<'de> for EventGroupChatUpdatedUpdateType<S> {
668    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
669    where
670        D: serde::Deserializer<'de>,
671    {
672        let s = S::deserialize(deserializer)?;
673        Ok(Self::from_value(s))
674    }
675}
676
677impl<S: BosStr + Default> Default for EventGroupChatUpdatedUpdateType<S> {
678    fn default() -> Self {
679        Self::Other(Default::default())
680    }
681}
682
683impl<S: BosStr> jacquard_common::IntoStatic for EventGroupChatUpdatedUpdateType<S>
684where
685    S: BosStr + jacquard_common::IntoStatic,
686    S::Output: BosStr,
687{
688    type Output = EventGroupChatUpdatedUpdateType<S::Output>;
689    fn into_static(self) -> Self::Output {
690        match self {
691            EventGroupChatUpdatedUpdateType::NameChanged => {
692                EventGroupChatUpdatedUpdateType::NameChanged
693            }
694            EventGroupChatUpdatedUpdateType::Locked => EventGroupChatUpdatedUpdateType::Locked,
695            EventGroupChatUpdatedUpdateType::LockedPermanently => {
696                EventGroupChatUpdatedUpdateType::LockedPermanently
697            }
698            EventGroupChatUpdatedUpdateType::Unlocked => EventGroupChatUpdatedUpdateType::Unlocked,
699            EventGroupChatUpdatedUpdateType::JoinLinkCreated => {
700                EventGroupChatUpdatedUpdateType::JoinLinkCreated
701            }
702            EventGroupChatUpdatedUpdateType::JoinLinkDisabled => {
703                EventGroupChatUpdatedUpdateType::JoinLinkDisabled
704            }
705            EventGroupChatUpdatedUpdateType::JoinLinkSettingsChanged => {
706                EventGroupChatUpdatedUpdateType::JoinLinkSettingsChanged
707            }
708            EventGroupChatUpdatedUpdateType::Other(v) => {
709                EventGroupChatUpdatedUpdateType::Other(v.into_static())
710            }
711        }
712    }
713}
714
715/// Fired when a user exceeds a rate limit.
716
717#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
718#[serde(
719    rename_all = "camelCase",
720    bound(deserialize = "S: Deserialize<'de> + BosStr")
721)]
722pub struct EventRateLimitExceeded<S: BosStr = DefaultStr> {
723    ///The DID of the user who hit the rate limit.
724    pub actor_did: Did<S>,
725    pub created_at: Datetime,
726    ///The NSID of the endpoint that was rate limited.
727    pub endpoint: S,
728    pub rev: S,
729    #[serde(flatten, default, skip_serializing_if = "Option::is_none")]
730    pub extra_data: Option<BTreeMap<SmolStr, Data<S>>>,
731}
732
733#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
734#[serde(
735    rename_all = "camelCase",
736    bound(deserialize = "S: Deserialize<'de> + BosStr")
737)]
738pub struct SubscribeModEvents<S: BosStr = DefaultStr> {
739    #[serde(skip_serializing_if = "Option::is_none")]
740    pub cursor: Option<S>,
741}
742
743#[open_union]
744#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
745#[serde(tag = "$type", bound(deserialize = "S: Deserialize<'de> + BosStr"))]
746pub enum SubscribeModEventsMessage<S: BosStr = DefaultStr> {
747    #[serde(rename = "#eventConvoFirstMessage")]
748    EventConvoFirstMessage(Box<subscribe_mod_events::EventConvoFirstMessage<S>>),
749    #[serde(rename = "#eventGroupChatCreated")]
750    EventGroupChatCreated(Box<subscribe_mod_events::EventGroupChatCreated<S>>),
751    #[serde(rename = "#eventGroupChatMemberAdded")]
752    EventGroupChatMemberAdded(Box<subscribe_mod_events::EventGroupChatMemberAdded<S>>),
753    #[serde(rename = "#eventGroupChatMemberJoined")]
754    EventGroupChatMemberJoined(Box<subscribe_mod_events::EventGroupChatMemberJoined<S>>),
755    #[serde(rename = "#eventGroupChatJoinRequest")]
756    EventGroupChatJoinRequest(Box<subscribe_mod_events::EventGroupChatJoinRequest<S>>),
757    #[serde(rename = "#eventGroupChatJoinRequestApproved")]
758    EventGroupChatJoinRequestApproved(
759        Box<subscribe_mod_events::EventGroupChatJoinRequestApproved<S>>,
760    ),
761    #[serde(rename = "#eventGroupChatJoinRequestRejected")]
762    EventGroupChatJoinRequestRejected(
763        Box<subscribe_mod_events::EventGroupChatJoinRequestRejected<S>>,
764    ),
765    #[serde(rename = "#eventChatAccepted")]
766    EventChatAccepted(Box<subscribe_mod_events::EventChatAccepted<S>>),
767    #[serde(rename = "#eventGroupChatMemberLeft")]
768    EventGroupChatMemberLeft(Box<subscribe_mod_events::EventGroupChatMemberLeft<S>>),
769    #[serde(rename = "#eventGroupChatUpdated")]
770    EventGroupChatUpdated(Box<subscribe_mod_events::EventGroupChatUpdated<S>>),
771    #[serde(rename = "#eventRateLimitExceeded")]
772    EventRateLimitExceeded(Box<subscribe_mod_events::EventRateLimitExceeded<S>>),
773}
774
775impl<S: BosStr> SubscribeModEventsMessage<S> {
776    /// Decode a framed DAG-CBOR message (header + body).
777    pub fn decode_framed<'de>(
778        bytes: &'de [u8],
779    ) -> Result<SubscribeModEventsMessage<S>, jacquard_common::error::DecodeError>
780    where
781        S: serde::Deserialize<'de>,
782    {
783        let (header, body) = jacquard_common::xrpc::subscription::parse_event_header(bytes)?;
784        match header.t.as_str() {
785            "#eventConvoFirstMessage" => {
786                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
787                Ok(Self::EventConvoFirstMessage(Box::new(variant)))
788            }
789            "#eventGroupChatCreated" => {
790                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
791                Ok(Self::EventGroupChatCreated(Box::new(variant)))
792            }
793            "#eventGroupChatMemberAdded" => {
794                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
795                Ok(Self::EventGroupChatMemberAdded(Box::new(variant)))
796            }
797            "#eventGroupChatMemberJoined" => {
798                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
799                Ok(Self::EventGroupChatMemberJoined(Box::new(variant)))
800            }
801            "#eventGroupChatJoinRequest" => {
802                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
803                Ok(Self::EventGroupChatJoinRequest(Box::new(variant)))
804            }
805            "#eventGroupChatJoinRequestApproved" => {
806                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
807                Ok(Self::EventGroupChatJoinRequestApproved(Box::new(variant)))
808            }
809            "#eventGroupChatJoinRequestRejected" => {
810                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
811                Ok(Self::EventGroupChatJoinRequestRejected(Box::new(variant)))
812            }
813            "#eventChatAccepted" => {
814                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
815                Ok(Self::EventChatAccepted(Box::new(variant)))
816            }
817            "#eventGroupChatMemberLeft" => {
818                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
819                Ok(Self::EventGroupChatMemberLeft(Box::new(variant)))
820            }
821            "#eventGroupChatUpdated" => {
822                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
823                Ok(Self::EventGroupChatUpdated(Box::new(variant)))
824            }
825            "#eventRateLimitExceeded" => {
826                let variant = jacquard_common::deps::codegen::serde_ipld_dagcbor::from_slice(body)?;
827                Ok(Self::EventRateLimitExceeded(Box::new(variant)))
828            }
829            unknown => Err(jacquard_common::error::DecodeError::UnknownEventType(
830                unknown.into(),
831            )),
832        }
833    }
834}
835
836#[derive(
837    Serialize, Deserialize, Debug, Clone, PartialEq, Eq, thiserror::Error, miette::Diagnostic,
838)]
839#[serde(tag = "error", content = "message")]
840pub enum SubscribeModEventsError {
841    #[serde(rename = "FutureCursor")]
842    FutureCursor(Option<SmolStr>),
843    /// If the consumer of the stream can not keep up with events, and a backlog gets too large, the server will drop the connection.
844    #[serde(rename = "ConsumerTooSlow")]
845    ConsumerTooSlow(Option<SmolStr>),
846    /// Catch-all for unknown error codes.
847    #[serde(untagged)]
848    Other {
849        error: SmolStr,
850        message: Option<SmolStr>,
851    },
852}
853
854impl core::fmt::Display for SubscribeModEventsError {
855    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
856        match self {
857            Self::FutureCursor(msg) => {
858                write!(f, "FutureCursor")?;
859                if let Some(msg) = msg {
860                    write!(f, ": {}", msg)?;
861                }
862                Ok(())
863            }
864            Self::ConsumerTooSlow(msg) => {
865                write!(f, "ConsumerTooSlow")?;
866                if let Some(msg) = msg {
867                    write!(f, ": {}", msg)?;
868                }
869                Ok(())
870            }
871            Self::Other { error, message } => {
872                write!(f, "{}", error)?;
873                if let Some(msg) = message {
874                    write!(f, ": {}", msg)?;
875                }
876                Ok(())
877            }
878        }
879    }
880}
881
882impl<S: BosStr> LexiconSchema for EventChatAccepted<S> {
883    fn nsid() -> &'static str {
884        "chat.bsky.moderation.subscribeModEvents"
885    }
886    fn def_name() -> &'static str {
887        "eventChatAccepted"
888    }
889    fn lexicon_doc() -> LexiconDoc<'static> {
890        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
891    }
892    fn validate(&self) -> Result<(), ConstraintError> {
893        Ok(())
894    }
895}
896
897impl<S: BosStr> LexiconSchema for EventConvoFirstMessage<S> {
898    fn nsid() -> &'static str {
899        "chat.bsky.moderation.subscribeModEvents"
900    }
901    fn def_name() -> &'static str {
902        "eventConvoFirstMessage"
903    }
904    fn lexicon_doc() -> LexiconDoc<'static> {
905        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
906    }
907    fn validate(&self) -> Result<(), ConstraintError> {
908        Ok(())
909    }
910}
911
912impl<S: BosStr> LexiconSchema for EventGroupChatCreated<S> {
913    fn nsid() -> &'static str {
914        "chat.bsky.moderation.subscribeModEvents"
915    }
916    fn def_name() -> &'static str {
917        "eventGroupChatCreated"
918    }
919    fn lexicon_doc() -> LexiconDoc<'static> {
920        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
921    }
922    fn validate(&self) -> Result<(), ConstraintError> {
923        Ok(())
924    }
925}
926
927impl<S: BosStr> LexiconSchema for EventGroupChatJoinRequest<S> {
928    fn nsid() -> &'static str {
929        "chat.bsky.moderation.subscribeModEvents"
930    }
931    fn def_name() -> &'static str {
932        "eventGroupChatJoinRequest"
933    }
934    fn lexicon_doc() -> LexiconDoc<'static> {
935        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
936    }
937    fn validate(&self) -> Result<(), ConstraintError> {
938        Ok(())
939    }
940}
941
942impl<S: BosStr> LexiconSchema for EventGroupChatJoinRequestApproved<S> {
943    fn nsid() -> &'static str {
944        "chat.bsky.moderation.subscribeModEvents"
945    }
946    fn def_name() -> &'static str {
947        "eventGroupChatJoinRequestApproved"
948    }
949    fn lexicon_doc() -> LexiconDoc<'static> {
950        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
951    }
952    fn validate(&self) -> Result<(), ConstraintError> {
953        Ok(())
954    }
955}
956
957impl<S: BosStr> LexiconSchema for EventGroupChatJoinRequestRejected<S> {
958    fn nsid() -> &'static str {
959        "chat.bsky.moderation.subscribeModEvents"
960    }
961    fn def_name() -> &'static str {
962        "eventGroupChatJoinRequestRejected"
963    }
964    fn lexicon_doc() -> LexiconDoc<'static> {
965        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
966    }
967    fn validate(&self) -> Result<(), ConstraintError> {
968        Ok(())
969    }
970}
971
972impl<S: BosStr> LexiconSchema for EventGroupChatMemberAdded<S> {
973    fn nsid() -> &'static str {
974        "chat.bsky.moderation.subscribeModEvents"
975    }
976    fn def_name() -> &'static str {
977        "eventGroupChatMemberAdded"
978    }
979    fn lexicon_doc() -> LexiconDoc<'static> {
980        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
981    }
982    fn validate(&self) -> Result<(), ConstraintError> {
983        Ok(())
984    }
985}
986
987impl<S: BosStr> LexiconSchema for EventGroupChatMemberJoined<S> {
988    fn nsid() -> &'static str {
989        "chat.bsky.moderation.subscribeModEvents"
990    }
991    fn def_name() -> &'static str {
992        "eventGroupChatMemberJoined"
993    }
994    fn lexicon_doc() -> LexiconDoc<'static> {
995        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
996    }
997    fn validate(&self) -> Result<(), ConstraintError> {
998        Ok(())
999    }
1000}
1001
1002impl<S: BosStr> LexiconSchema for EventGroupChatMemberLeft<S> {
1003    fn nsid() -> &'static str {
1004        "chat.bsky.moderation.subscribeModEvents"
1005    }
1006    fn def_name() -> &'static str {
1007        "eventGroupChatMemberLeft"
1008    }
1009    fn lexicon_doc() -> LexiconDoc<'static> {
1010        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
1011    }
1012    fn validate(&self) -> Result<(), ConstraintError> {
1013        Ok(())
1014    }
1015}
1016
1017impl<S: BosStr> LexiconSchema for EventGroupChatUpdated<S> {
1018    fn nsid() -> &'static str {
1019        "chat.bsky.moderation.subscribeModEvents"
1020    }
1021    fn def_name() -> &'static str {
1022        "eventGroupChatUpdated"
1023    }
1024    fn lexicon_doc() -> LexiconDoc<'static> {
1025        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
1026    }
1027    fn validate(&self) -> Result<(), ConstraintError> {
1028        Ok(())
1029    }
1030}
1031
1032impl<S: BosStr> LexiconSchema for EventRateLimitExceeded<S> {
1033    fn nsid() -> &'static str {
1034        "chat.bsky.moderation.subscribeModEvents"
1035    }
1036    fn def_name() -> &'static str {
1037        "eventRateLimitExceeded"
1038    }
1039    fn lexicon_doc() -> LexiconDoc<'static> {
1040        lexicon_doc_chat_bsky_moderation_subscribeModEvents()
1041    }
1042    fn validate(&self) -> Result<(), ConstraintError> {
1043        Ok(())
1044    }
1045}
1046
1047///Stream response type for
1048///chat.bsky.moderation.subscribeModEvents
1049pub struct SubscribeModEventsStream;
1050impl jacquard_common::xrpc::SubscriptionResp for SubscribeModEventsStream {
1051    const NSID: &'static str = "chat.bsky.moderation.subscribeModEvents";
1052    const ENCODING: jacquard_common::xrpc::MessageEncoding =
1053        jacquard_common::xrpc::MessageEncoding::Json;
1054    type Message<S: BosStr> = SubscribeModEventsMessage<S>;
1055    type Error = SubscribeModEventsError;
1056}
1057
1058impl<S: BosStr> jacquard_common::xrpc::XrpcSubscription for SubscribeModEvents<S> {
1059    const NSID: &'static str = "chat.bsky.moderation.subscribeModEvents";
1060    const ENCODING: jacquard_common::xrpc::MessageEncoding =
1061        jacquard_common::xrpc::MessageEncoding::Json;
1062    type Stream = SubscribeModEventsStream;
1063}
1064
1065pub struct SubscribeModEventsEndpoint;
1066impl jacquard_common::xrpc::SubscriptionEndpoint for SubscribeModEventsEndpoint {
1067    const PATH: &'static str = "/xrpc/chat.bsky.moderation.subscribeModEvents";
1068    const ENCODING: jacquard_common::xrpc::MessageEncoding =
1069        jacquard_common::xrpc::MessageEncoding::Json;
1070    type Params<S: BosStr> = SubscribeModEvents<S>;
1071    type Stream = SubscribeModEventsStream;
1072}
1073
1074pub mod event_chat_accepted_state {
1075
1076    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
1077    #[allow(unused)]
1078    use ::core::marker::PhantomData;
1079    mod sealed {
1080        pub trait Sealed {}
1081    }
1082    /// State trait tracking which required fields have been set
1083    pub trait State: sealed::Sealed {
1084        type ActorDid;
1085        type ConvoCreatedAt;
1086        type ConvoId;
1087        type CreatedAt;
1088        type Method;
1089        type Rev;
1090    }
1091    /// Empty state - all required fields are unset
1092    pub struct Empty(());
1093    impl sealed::Sealed for Empty {}
1094    impl State for Empty {
1095        type ActorDid = Unset;
1096        type ConvoCreatedAt = Unset;
1097        type ConvoId = Unset;
1098        type CreatedAt = Unset;
1099        type Method = Unset;
1100        type Rev = Unset;
1101    }
1102    ///State transition - sets the `actor_did` field to Set
1103    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
1104    impl<St: State> sealed::Sealed for SetActorDid<St> {}
1105    impl<St: State> State for SetActorDid<St> {
1106        type ActorDid = Set<members::actor_did>;
1107        type ConvoCreatedAt = St::ConvoCreatedAt;
1108        type ConvoId = St::ConvoId;
1109        type CreatedAt = St::CreatedAt;
1110        type Method = St::Method;
1111        type Rev = St::Rev;
1112    }
1113    ///State transition - sets the `convo_created_at` field to Set
1114    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
1115    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
1116    impl<St: State> State for SetConvoCreatedAt<St> {
1117        type ActorDid = St::ActorDid;
1118        type ConvoCreatedAt = Set<members::convo_created_at>;
1119        type ConvoId = St::ConvoId;
1120        type CreatedAt = St::CreatedAt;
1121        type Method = St::Method;
1122        type Rev = St::Rev;
1123    }
1124    ///State transition - sets the `convo_id` field to Set
1125    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
1126    impl<St: State> sealed::Sealed for SetConvoId<St> {}
1127    impl<St: State> State for SetConvoId<St> {
1128        type ActorDid = St::ActorDid;
1129        type ConvoCreatedAt = St::ConvoCreatedAt;
1130        type ConvoId = Set<members::convo_id>;
1131        type CreatedAt = St::CreatedAt;
1132        type Method = St::Method;
1133        type Rev = St::Rev;
1134    }
1135    ///State transition - sets the `created_at` field to Set
1136    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
1137    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
1138    impl<St: State> State for SetCreatedAt<St> {
1139        type ActorDid = St::ActorDid;
1140        type ConvoCreatedAt = St::ConvoCreatedAt;
1141        type ConvoId = St::ConvoId;
1142        type CreatedAt = Set<members::created_at>;
1143        type Method = St::Method;
1144        type Rev = St::Rev;
1145    }
1146    ///State transition - sets the `method` field to Set
1147    pub struct SetMethod<St: State = Empty>(PhantomData<fn() -> St>);
1148    impl<St: State> sealed::Sealed for SetMethod<St> {}
1149    impl<St: State> State for SetMethod<St> {
1150        type ActorDid = St::ActorDid;
1151        type ConvoCreatedAt = St::ConvoCreatedAt;
1152        type ConvoId = St::ConvoId;
1153        type CreatedAt = St::CreatedAt;
1154        type Method = Set<members::method>;
1155        type Rev = St::Rev;
1156    }
1157    ///State transition - sets the `rev` field to Set
1158    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
1159    impl<St: State> sealed::Sealed for SetRev<St> {}
1160    impl<St: State> State for SetRev<St> {
1161        type ActorDid = St::ActorDid;
1162        type ConvoCreatedAt = St::ConvoCreatedAt;
1163        type ConvoId = St::ConvoId;
1164        type CreatedAt = St::CreatedAt;
1165        type Method = St::Method;
1166        type Rev = Set<members::rev>;
1167    }
1168    /// Marker types for field names
1169    #[allow(non_camel_case_types)]
1170    pub mod members {
1171        ///Marker type for the `actor_did` field
1172        pub struct actor_did(());
1173        ///Marker type for the `convo_created_at` field
1174        pub struct convo_created_at(());
1175        ///Marker type for the `convo_id` field
1176        pub struct convo_id(());
1177        ///Marker type for the `created_at` field
1178        pub struct created_at(());
1179        ///Marker type for the `method` field
1180        pub struct method(());
1181        ///Marker type for the `rev` field
1182        pub struct rev(());
1183    }
1184}
1185
1186/// Builder for constructing an instance of this type.
1187pub struct EventChatAcceptedBuilder<St: event_chat_accepted_state::State, S: BosStr = DefaultStr> {
1188    _state: PhantomData<fn() -> St>,
1189    _fields: (
1190        Option<Did<S>>,
1191        Option<Datetime>,
1192        Option<S>,
1193        Option<Datetime>,
1194        Option<i64>,
1195        Option<S>,
1196        Option<EventChatAcceptedMethod<S>>,
1197        Option<Did<S>>,
1198        Option<S>,
1199    ),
1200    _type: PhantomData<fn() -> S>,
1201}
1202
1203impl EventChatAccepted<DefaultStr> {
1204    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
1205    pub fn new() -> EventChatAcceptedBuilder<event_chat_accepted_state::Empty, DefaultStr> {
1206        EventChatAcceptedBuilder::new()
1207    }
1208}
1209
1210impl<S: BosStr> EventChatAccepted<S> {
1211    /// Create a new builder for this type
1212    pub fn builder() -> EventChatAcceptedBuilder<event_chat_accepted_state::Empty, S> {
1213        EventChatAcceptedBuilder::builder()
1214    }
1215}
1216
1217impl EventChatAcceptedBuilder<event_chat_accepted_state::Empty, DefaultStr> {
1218    /// Create a new builder with all fields unset, using the default string type, if needed
1219    pub fn new() -> Self {
1220        EventChatAcceptedBuilder {
1221            _state: PhantomData,
1222            _fields: (None, None, None, None, None, None, None, None, None),
1223            _type: PhantomData,
1224        }
1225    }
1226}
1227
1228impl<S: BosStr> EventChatAcceptedBuilder<event_chat_accepted_state::Empty, S> {
1229    /// Create a new builder with all fields unset
1230    pub fn builder() -> Self {
1231        EventChatAcceptedBuilder {
1232            _state: PhantomData,
1233            _fields: (None, None, None, None, None, None, None, None, None),
1234            _type: PhantomData,
1235        }
1236    }
1237}
1238
1239impl<St, S: BosStr> EventChatAcceptedBuilder<St, S>
1240where
1241    St: event_chat_accepted_state::State,
1242    St::ActorDid: event_chat_accepted_state::IsUnset,
1243{
1244    /// Set the `actorDid` field (required)
1245    pub fn actor_did(
1246        mut self,
1247        value: impl Into<Did<S>>,
1248    ) -> EventChatAcceptedBuilder<event_chat_accepted_state::SetActorDid<St>, S> {
1249        self._fields.0 = Option::Some(value.into());
1250        EventChatAcceptedBuilder {
1251            _state: PhantomData,
1252            _fields: self._fields,
1253            _type: PhantomData,
1254        }
1255    }
1256}
1257
1258impl<St, S: BosStr> EventChatAcceptedBuilder<St, S>
1259where
1260    St: event_chat_accepted_state::State,
1261    St::ConvoCreatedAt: event_chat_accepted_state::IsUnset,
1262{
1263    /// Set the `convoCreatedAt` field (required)
1264    pub fn convo_created_at(
1265        mut self,
1266        value: impl Into<Datetime>,
1267    ) -> EventChatAcceptedBuilder<event_chat_accepted_state::SetConvoCreatedAt<St>, S> {
1268        self._fields.1 = Option::Some(value.into());
1269        EventChatAcceptedBuilder {
1270            _state: PhantomData,
1271            _fields: self._fields,
1272            _type: PhantomData,
1273        }
1274    }
1275}
1276
1277impl<St, S: BosStr> EventChatAcceptedBuilder<St, S>
1278where
1279    St: event_chat_accepted_state::State,
1280    St::ConvoId: event_chat_accepted_state::IsUnset,
1281{
1282    /// Set the `convoId` field (required)
1283    pub fn convo_id(
1284        mut self,
1285        value: impl Into<S>,
1286    ) -> EventChatAcceptedBuilder<event_chat_accepted_state::SetConvoId<St>, S> {
1287        self._fields.2 = Option::Some(value.into());
1288        EventChatAcceptedBuilder {
1289            _state: PhantomData,
1290            _fields: self._fields,
1291            _type: PhantomData,
1292        }
1293    }
1294}
1295
1296impl<St, S: BosStr> EventChatAcceptedBuilder<St, S>
1297where
1298    St: event_chat_accepted_state::State,
1299    St::CreatedAt: event_chat_accepted_state::IsUnset,
1300{
1301    /// Set the `createdAt` field (required)
1302    pub fn created_at(
1303        mut self,
1304        value: impl Into<Datetime>,
1305    ) -> EventChatAcceptedBuilder<event_chat_accepted_state::SetCreatedAt<St>, S> {
1306        self._fields.3 = Option::Some(value.into());
1307        EventChatAcceptedBuilder {
1308            _state: PhantomData,
1309            _fields: self._fields,
1310            _type: PhantomData,
1311        }
1312    }
1313}
1314
1315impl<St: event_chat_accepted_state::State, S: BosStr> EventChatAcceptedBuilder<St, S> {
1316    /// Set the `groupMemberCount` field (optional)
1317    pub fn group_member_count(mut self, value: impl Into<Option<i64>>) -> Self {
1318        self._fields.4 = value.into();
1319        self
1320    }
1321    /// Set the `groupMemberCount` field to an Option value (optional)
1322    pub fn maybe_group_member_count(mut self, value: Option<i64>) -> Self {
1323        self._fields.4 = value;
1324        self
1325    }
1326}
1327
1328impl<St: event_chat_accepted_state::State, S: BosStr> EventChatAcceptedBuilder<St, S> {
1329    /// Set the `groupName` field (optional)
1330    pub fn group_name(mut self, value: impl Into<Option<S>>) -> Self {
1331        self._fields.5 = value.into();
1332        self
1333    }
1334    /// Set the `groupName` field to an Option value (optional)
1335    pub fn maybe_group_name(mut self, value: Option<S>) -> Self {
1336        self._fields.5 = value;
1337        self
1338    }
1339}
1340
1341impl<St, S: BosStr> EventChatAcceptedBuilder<St, S>
1342where
1343    St: event_chat_accepted_state::State,
1344    St::Method: event_chat_accepted_state::IsUnset,
1345{
1346    /// Set the `method` field (required)
1347    pub fn method(
1348        mut self,
1349        value: impl Into<EventChatAcceptedMethod<S>>,
1350    ) -> EventChatAcceptedBuilder<event_chat_accepted_state::SetMethod<St>, S> {
1351        self._fields.6 = Option::Some(value.into());
1352        EventChatAcceptedBuilder {
1353            _state: PhantomData,
1354            _fields: self._fields,
1355            _type: PhantomData,
1356        }
1357    }
1358}
1359
1360impl<St: event_chat_accepted_state::State, S: BosStr> EventChatAcceptedBuilder<St, S> {
1361    /// Set the `ownerDid` field (optional)
1362    pub fn owner_did(mut self, value: impl Into<Option<Did<S>>>) -> Self {
1363        self._fields.7 = value.into();
1364        self
1365    }
1366    /// Set the `ownerDid` field to an Option value (optional)
1367    pub fn maybe_owner_did(mut self, value: Option<Did<S>>) -> Self {
1368        self._fields.7 = value;
1369        self
1370    }
1371}
1372
1373impl<St, S: BosStr> EventChatAcceptedBuilder<St, S>
1374where
1375    St: event_chat_accepted_state::State,
1376    St::Rev: event_chat_accepted_state::IsUnset,
1377{
1378    /// Set the `rev` field (required)
1379    pub fn rev(
1380        mut self,
1381        value: impl Into<S>,
1382    ) -> EventChatAcceptedBuilder<event_chat_accepted_state::SetRev<St>, S> {
1383        self._fields.8 = Option::Some(value.into());
1384        EventChatAcceptedBuilder {
1385            _state: PhantomData,
1386            _fields: self._fields,
1387            _type: PhantomData,
1388        }
1389    }
1390}
1391
1392impl<St, S: BosStr> EventChatAcceptedBuilder<St, S>
1393where
1394    St: event_chat_accepted_state::State,
1395    St::ActorDid: event_chat_accepted_state::IsSet,
1396    St::ConvoCreatedAt: event_chat_accepted_state::IsSet,
1397    St::ConvoId: event_chat_accepted_state::IsSet,
1398    St::CreatedAt: event_chat_accepted_state::IsSet,
1399    St::Method: event_chat_accepted_state::IsSet,
1400    St::Rev: event_chat_accepted_state::IsSet,
1401{
1402    /// Build the final struct.
1403    pub fn build(self) -> EventChatAccepted<S> {
1404        EventChatAccepted {
1405            actor_did: self._fields.0.unwrap(),
1406            convo_created_at: self._fields.1.unwrap(),
1407            convo_id: self._fields.2.unwrap(),
1408            created_at: self._fields.3.unwrap(),
1409            group_member_count: self._fields.4,
1410            group_name: self._fields.5,
1411            method: self._fields.6.unwrap(),
1412            owner_did: self._fields.7,
1413            rev: self._fields.8.unwrap(),
1414            extra_data: Default::default(),
1415        }
1416    }
1417    /// Build the final struct with custom extra_data.
1418    pub fn build_with_data(self, extra_data: BTreeMap<SmolStr, Data<S>>) -> EventChatAccepted<S> {
1419        EventChatAccepted {
1420            actor_did: self._fields.0.unwrap(),
1421            convo_created_at: self._fields.1.unwrap(),
1422            convo_id: self._fields.2.unwrap(),
1423            created_at: self._fields.3.unwrap(),
1424            group_member_count: self._fields.4,
1425            group_name: self._fields.5,
1426            method: self._fields.6.unwrap(),
1427            owner_did: self._fields.7,
1428            rev: self._fields.8.unwrap(),
1429            extra_data: Some(extra_data),
1430        }
1431    }
1432}
1433
1434fn lexicon_doc_chat_bsky_moderation_subscribeModEvents() -> LexiconDoc<'static> {
1435    use alloc::collections::BTreeMap;
1436    #[allow(unused_imports)]
1437    use jacquard_common::{CowStr, deps::smol_str::SmolStr, types::blob::MimeType};
1438    use jacquard_lexicon::lexicon::*;
1439    LexiconDoc {
1440        lexicon: Lexicon::Lexicon1,
1441        id: CowStr::new_static("chat.bsky.moderation.subscribeModEvents"),
1442        defs: {
1443            let mut map = BTreeMap::new();
1444            map.insert(
1445                SmolStr::new_static("eventChatAccepted"),
1446                LexUserType::Object(LexObject {
1447                    description: Some(
1448                        CowStr::new_static(
1449                            "Fired when a user accepts a chat convo, either explicitly or by sending a message.",
1450                        ),
1451                    ),
1452                    required: Some(
1453                        vec![
1454                            SmolStr::new_static("actorDid"),
1455                            SmolStr::new_static("convoCreatedAt"),
1456                            SmolStr::new_static("convoId"),
1457                            SmolStr::new_static("createdAt"),
1458                            SmolStr::new_static("method"), SmolStr::new_static("rev")
1459                        ],
1460                    ),
1461                    properties: {
1462                        #[allow(unused_mut)]
1463                        let mut map = BTreeMap::new();
1464                        map.insert(
1465                            SmolStr::new_static("actorDid"),
1466                            LexObjectProperty::String(LexString {
1467                                description: Some(
1468                                    CowStr::new_static(
1469                                        "The DID of the person accepting the convo.",
1470                                    ),
1471                                ),
1472                                format: Some(LexStringFormat::Did),
1473                                ..Default::default()
1474                            }),
1475                        );
1476                        map.insert(
1477                            SmolStr::new_static("convoCreatedAt"),
1478                            LexObjectProperty::String(LexString {
1479                                description: Some(
1480                                    CowStr::new_static("When the convo was originally created."),
1481                                ),
1482                                format: Some(LexStringFormat::Datetime),
1483                                ..Default::default()
1484                            }),
1485                        );
1486                        map.insert(
1487                            SmolStr::new_static("convoId"),
1488                            LexObjectProperty::String(LexString { ..Default::default() }),
1489                        );
1490                        map.insert(
1491                            SmolStr::new_static("createdAt"),
1492                            LexObjectProperty::String(LexString {
1493                                format: Some(LexStringFormat::Datetime),
1494                                ..Default::default()
1495                            }),
1496                        );
1497                        map.insert(
1498                            SmolStr::new_static("groupMemberCount"),
1499                            LexObjectProperty::Integer(LexInteger {
1500                                ..Default::default()
1501                            }),
1502                        );
1503                        map.insert(
1504                            SmolStr::new_static("groupName"),
1505                            LexObjectProperty::String(LexString {
1506                                description: Some(
1507                                    CowStr::new_static(
1508                                        "The name of the group chat. Only present for group convos.",
1509                                    ),
1510                                ),
1511                                ..Default::default()
1512                            }),
1513                        );
1514                        map.insert(
1515                            SmolStr::new_static("method"),
1516                            LexObjectProperty::String(LexString {
1517                                description: Some(
1518                                    CowStr::new_static("How the convo was accepted."),
1519                                ),
1520                                ..Default::default()
1521                            }),
1522                        );
1523                        map.insert(
1524                            SmolStr::new_static("ownerDid"),
1525                            LexObjectProperty::String(LexString {
1526                                description: Some(
1527                                    CowStr::new_static(
1528                                        "The DID of the group chat owner. Only present for group convos.",
1529                                    ),
1530                                ),
1531                                format: Some(LexStringFormat::Did),
1532                                ..Default::default()
1533                            }),
1534                        );
1535                        map.insert(
1536                            SmolStr::new_static("rev"),
1537                            LexObjectProperty::String(LexString { ..Default::default() }),
1538                        );
1539                        map
1540                    },
1541                    ..Default::default()
1542                }),
1543            );
1544            map.insert(
1545                SmolStr::new_static("eventConvoFirstMessage"),
1546                LexUserType::Object(LexObject {
1547                    description: Some(
1548                        CowStr::new_static(
1549                            "Fired when the first message was sent on a convo.",
1550                        ),
1551                    ),
1552                    required: Some(
1553                        vec![
1554                            SmolStr::new_static("createdAt"), SmolStr::new_static("rev"),
1555                            SmolStr::new_static("convoId"), SmolStr::new_static("user"),
1556                            SmolStr::new_static("recipients")
1557                        ],
1558                    ),
1559                    properties: {
1560                        #[allow(unused_mut)]
1561                        let mut map = BTreeMap::new();
1562                        map.insert(
1563                            SmolStr::new_static("convoId"),
1564                            LexObjectProperty::String(LexString { ..Default::default() }),
1565                        );
1566                        map.insert(
1567                            SmolStr::new_static("createdAt"),
1568                            LexObjectProperty::String(LexString {
1569                                format: Some(LexStringFormat::Datetime),
1570                                ..Default::default()
1571                            }),
1572                        );
1573                        map.insert(
1574                            SmolStr::new_static("messageId"),
1575                            LexObjectProperty::String(LexString { ..Default::default() }),
1576                        );
1577                        map.insert(
1578                            SmolStr::new_static("recipients"),
1579                            LexObjectProperty::Array(LexArray {
1580                                description: Some(
1581                                    CowStr::new_static(
1582                                        "The list of DIDs message recipients. Does not include the sender, which is in the `user` field",
1583                                    ),
1584                                ),
1585                                items: LexArrayItem::String(LexString {
1586                                    format: Some(LexStringFormat::Did),
1587                                    ..Default::default()
1588                                }),
1589                                ..Default::default()
1590                            }),
1591                        );
1592                        map.insert(
1593                            SmolStr::new_static("rev"),
1594                            LexObjectProperty::String(LexString { ..Default::default() }),
1595                        );
1596                        map.insert(
1597                            SmolStr::new_static("user"),
1598                            LexObjectProperty::String(LexString {
1599                                description: Some(
1600                                    CowStr::new_static("The DID of the message author."),
1601                                ),
1602                                format: Some(LexStringFormat::Did),
1603                                ..Default::default()
1604                            }),
1605                        );
1606                        map
1607                    },
1608                    ..Default::default()
1609                }),
1610            );
1611            map.insert(
1612                SmolStr::new_static("eventGroupChatCreated"),
1613                LexUserType::Object(LexObject {
1614                    description: Some(
1615                        CowStr::new_static("Fire when a group chat is created."),
1616                    ),
1617                    required: Some(
1618                        vec![
1619                            SmolStr::new_static("actorDid"),
1620                            SmolStr::new_static("convoCreatedAt"),
1621                            SmolStr::new_static("convoId"),
1622                            SmolStr::new_static("createdAt"),
1623                            SmolStr::new_static("groupMemberCount"),
1624                            SmolStr::new_static("groupName"),
1625                            SmolStr::new_static("initialMemberDids"),
1626                            SmolStr::new_static("ownerDid"), SmolStr::new_static("rev")
1627                        ],
1628                    ),
1629                    properties: {
1630                        #[allow(unused_mut)]
1631                        let mut map = BTreeMap::new();
1632                        map.insert(
1633                            SmolStr::new_static("actorDid"),
1634                            LexObjectProperty::String(LexString {
1635                                description: Some(
1636                                    CowStr::new_static(
1637                                        "The DID of the actor performing the action. For this event, same as ownerDid.",
1638                                    ),
1639                                ),
1640                                format: Some(LexStringFormat::Did),
1641                                ..Default::default()
1642                            }),
1643                        );
1644                        map.insert(
1645                            SmolStr::new_static("convoCreatedAt"),
1646                            LexObjectProperty::String(LexString {
1647                                description: Some(
1648                                    CowStr::new_static("When the group was originally created."),
1649                                ),
1650                                format: Some(LexStringFormat::Datetime),
1651                                ..Default::default()
1652                            }),
1653                        );
1654                        map.insert(
1655                            SmolStr::new_static("convoId"),
1656                            LexObjectProperty::String(LexString { ..Default::default() }),
1657                        );
1658                        map.insert(
1659                            SmolStr::new_static("createdAt"),
1660                            LexObjectProperty::String(LexString {
1661                                format: Some(LexStringFormat::Datetime),
1662                                ..Default::default()
1663                            }),
1664                        );
1665                        map.insert(
1666                            SmolStr::new_static("groupMemberCount"),
1667                            LexObjectProperty::Integer(LexInteger {
1668                                ..Default::default()
1669                            }),
1670                        );
1671                        map.insert(
1672                            SmolStr::new_static("groupName"),
1673                            LexObjectProperty::String(LexString {
1674                                description: Some(
1675                                    CowStr::new_static("The name set at creation time."),
1676                                ),
1677                                ..Default::default()
1678                            }),
1679                        );
1680                        map.insert(
1681                            SmolStr::new_static("initialMemberDids"),
1682                            LexObjectProperty::Array(LexArray {
1683                                description: Some(
1684                                    CowStr::new_static(
1685                                        "DIDs of everyone added at creation time.",
1686                                    ),
1687                                ),
1688                                items: LexArrayItem::String(LexString {
1689                                    format: Some(LexStringFormat::Did),
1690                                    ..Default::default()
1691                                }),
1692                                ..Default::default()
1693                            }),
1694                        );
1695                        map.insert(
1696                            SmolStr::new_static("ownerDid"),
1697                            LexObjectProperty::String(LexString {
1698                                description: Some(
1699                                    CowStr::new_static("The DID of the group chat owner."),
1700                                ),
1701                                format: Some(LexStringFormat::Did),
1702                                ..Default::default()
1703                            }),
1704                        );
1705                        map.insert(
1706                            SmolStr::new_static("rev"),
1707                            LexObjectProperty::String(LexString { ..Default::default() }),
1708                        );
1709                        map
1710                    },
1711                    ..Default::default()
1712                }),
1713            );
1714            map.insert(
1715                SmolStr::new_static("eventGroupChatJoinRequest"),
1716                LexUserType::Object(LexObject {
1717                    description: Some(
1718                        CowStr::new_static(
1719                            "Fired when a user requests to join a group chat via an join link that requires approval.",
1720                        ),
1721                    ),
1722                    required: Some(
1723                        vec![
1724                            SmolStr::new_static("actorDid"),
1725                            SmolStr::new_static("convoCreatedAt"),
1726                            SmolStr::new_static("convoId"),
1727                            SmolStr::new_static("createdAt"),
1728                            SmolStr::new_static("groupMemberCount"),
1729                            SmolStr::new_static("groupName"),
1730                            SmolStr::new_static("joinLinkCode"),
1731                            SmolStr::new_static("ownerDid"), SmolStr::new_static("rev"),
1732                            SmolStr::new_static("subjectFollowsOwner")
1733                        ],
1734                    ),
1735                    properties: {
1736                        #[allow(unused_mut)]
1737                        let mut map = BTreeMap::new();
1738                        map.insert(
1739                            SmolStr::new_static("actorDid"),
1740                            LexObjectProperty::String(LexString {
1741                                description: Some(
1742                                    CowStr::new_static(
1743                                        "The DID of the person requesting to join.",
1744                                    ),
1745                                ),
1746                                format: Some(LexStringFormat::Did),
1747                                ..Default::default()
1748                            }),
1749                        );
1750                        map.insert(
1751                            SmolStr::new_static("convoCreatedAt"),
1752                            LexObjectProperty::String(LexString {
1753                                description: Some(
1754                                    CowStr::new_static("When the group was originally created."),
1755                                ),
1756                                format: Some(LexStringFormat::Datetime),
1757                                ..Default::default()
1758                            }),
1759                        );
1760                        map.insert(
1761                            SmolStr::new_static("convoId"),
1762                            LexObjectProperty::String(LexString { ..Default::default() }),
1763                        );
1764                        map.insert(
1765                            SmolStr::new_static("createdAt"),
1766                            LexObjectProperty::String(LexString {
1767                                format: Some(LexStringFormat::Datetime),
1768                                ..Default::default()
1769                            }),
1770                        );
1771                        map.insert(
1772                            SmolStr::new_static("groupMemberCount"),
1773                            LexObjectProperty::Integer(LexInteger {
1774                                ..Default::default()
1775                            }),
1776                        );
1777                        map.insert(
1778                            SmolStr::new_static("groupName"),
1779                            LexObjectProperty::String(LexString { ..Default::default() }),
1780                        );
1781                        map.insert(
1782                            SmolStr::new_static("joinLinkCode"),
1783                            LexObjectProperty::String(LexString {
1784                                description: Some(
1785                                    CowStr::new_static(
1786                                        "The code of the join link used to request joining.",
1787                                    ),
1788                                ),
1789                                ..Default::default()
1790                            }),
1791                        );
1792                        map.insert(
1793                            SmolStr::new_static("ownerDid"),
1794                            LexObjectProperty::String(LexString {
1795                                description: Some(
1796                                    CowStr::new_static("The DID of the group chat owner."),
1797                                ),
1798                                format: Some(LexStringFormat::Did),
1799                                ..Default::default()
1800                            }),
1801                        );
1802                        map.insert(
1803                            SmolStr::new_static("rev"),
1804                            LexObjectProperty::String(LexString { ..Default::default() }),
1805                        );
1806                        map.insert(
1807                            SmolStr::new_static("subjectFollowsOwner"),
1808                            LexObjectProperty::Boolean(LexBoolean {
1809                                ..Default::default()
1810                            }),
1811                        );
1812                        map
1813                    },
1814                    ..Default::default()
1815                }),
1816            );
1817            map.insert(
1818                SmolStr::new_static("eventGroupChatJoinRequestApproved"),
1819                LexUserType::Object(LexObject {
1820                    description: Some(CowStr::new_static(
1821                        "Fired when a join request is approved by the group owner.",
1822                    )),
1823                    required: Some(vec![
1824                        SmolStr::new_static("actorDid"),
1825                        SmolStr::new_static("convoCreatedAt"),
1826                        SmolStr::new_static("convoId"),
1827                        SmolStr::new_static("createdAt"),
1828                        SmolStr::new_static("groupMemberCount"),
1829                        SmolStr::new_static("groupName"),
1830                        SmolStr::new_static("ownerDid"),
1831                        SmolStr::new_static("rev"),
1832                        SmolStr::new_static("subjectDid"),
1833                    ]),
1834                    properties: {
1835                        #[allow(unused_mut)]
1836                        let mut map = BTreeMap::new();
1837                        map.insert(
1838                            SmolStr::new_static("actorDid"),
1839                            LexObjectProperty::String(LexString {
1840                                description: Some(CowStr::new_static(
1841                                    "The DID of the owner approving the request.",
1842                                )),
1843                                format: Some(LexStringFormat::Did),
1844                                ..Default::default()
1845                            }),
1846                        );
1847                        map.insert(
1848                            SmolStr::new_static("convoCreatedAt"),
1849                            LexObjectProperty::String(LexString {
1850                                description: Some(CowStr::new_static(
1851                                    "When the group was originally created.",
1852                                )),
1853                                format: Some(LexStringFormat::Datetime),
1854                                ..Default::default()
1855                            }),
1856                        );
1857                        map.insert(
1858                            SmolStr::new_static("convoId"),
1859                            LexObjectProperty::String(LexString {
1860                                ..Default::default()
1861                            }),
1862                        );
1863                        map.insert(
1864                            SmolStr::new_static("createdAt"),
1865                            LexObjectProperty::String(LexString {
1866                                format: Some(LexStringFormat::Datetime),
1867                                ..Default::default()
1868                            }),
1869                        );
1870                        map.insert(
1871                            SmolStr::new_static("groupMemberCount"),
1872                            LexObjectProperty::Integer(LexInteger {
1873                                ..Default::default()
1874                            }),
1875                        );
1876                        map.insert(
1877                            SmolStr::new_static("groupName"),
1878                            LexObjectProperty::String(LexString {
1879                                ..Default::default()
1880                            }),
1881                        );
1882                        map.insert(
1883                            SmolStr::new_static("ownerDid"),
1884                            LexObjectProperty::String(LexString {
1885                                description: Some(CowStr::new_static(
1886                                    "The DID of the group chat owner.",
1887                                )),
1888                                format: Some(LexStringFormat::Did),
1889                                ..Default::default()
1890                            }),
1891                        );
1892                        map.insert(
1893                            SmolStr::new_static("rev"),
1894                            LexObjectProperty::String(LexString {
1895                                ..Default::default()
1896                            }),
1897                        );
1898                        map.insert(
1899                            SmolStr::new_static("subjectDid"),
1900                            LexObjectProperty::String(LexString {
1901                                description: Some(CowStr::new_static(
1902                                    "The DID of the member whose request was approved.",
1903                                )),
1904                                format: Some(LexStringFormat::Did),
1905                                ..Default::default()
1906                            }),
1907                        );
1908                        map
1909                    },
1910                    ..Default::default()
1911                }),
1912            );
1913            map.insert(
1914                SmolStr::new_static("eventGroupChatJoinRequestRejected"),
1915                LexUserType::Object(LexObject {
1916                    description: Some(CowStr::new_static(
1917                        "Fired when a join request is rejected by the group owner.",
1918                    )),
1919                    required: Some(vec![
1920                        SmolStr::new_static("actorDid"),
1921                        SmolStr::new_static("convoCreatedAt"),
1922                        SmolStr::new_static("convoId"),
1923                        SmolStr::new_static("createdAt"),
1924                        SmolStr::new_static("groupMemberCount"),
1925                        SmolStr::new_static("groupName"),
1926                        SmolStr::new_static("ownerDid"),
1927                        SmolStr::new_static("rev"),
1928                        SmolStr::new_static("subjectDid"),
1929                    ]),
1930                    properties: {
1931                        #[allow(unused_mut)]
1932                        let mut map = BTreeMap::new();
1933                        map.insert(
1934                            SmolStr::new_static("actorDid"),
1935                            LexObjectProperty::String(LexString {
1936                                description: Some(CowStr::new_static(
1937                                    "The DID of the owner rejecting the request.",
1938                                )),
1939                                format: Some(LexStringFormat::Did),
1940                                ..Default::default()
1941                            }),
1942                        );
1943                        map.insert(
1944                            SmolStr::new_static("convoCreatedAt"),
1945                            LexObjectProperty::String(LexString {
1946                                description: Some(CowStr::new_static(
1947                                    "When the group was originally created.",
1948                                )),
1949                                format: Some(LexStringFormat::Datetime),
1950                                ..Default::default()
1951                            }),
1952                        );
1953                        map.insert(
1954                            SmolStr::new_static("convoId"),
1955                            LexObjectProperty::String(LexString {
1956                                ..Default::default()
1957                            }),
1958                        );
1959                        map.insert(
1960                            SmolStr::new_static("createdAt"),
1961                            LexObjectProperty::String(LexString {
1962                                format: Some(LexStringFormat::Datetime),
1963                                ..Default::default()
1964                            }),
1965                        );
1966                        map.insert(
1967                            SmolStr::new_static("groupMemberCount"),
1968                            LexObjectProperty::Integer(LexInteger {
1969                                ..Default::default()
1970                            }),
1971                        );
1972                        map.insert(
1973                            SmolStr::new_static("groupName"),
1974                            LexObjectProperty::String(LexString {
1975                                ..Default::default()
1976                            }),
1977                        );
1978                        map.insert(
1979                            SmolStr::new_static("ownerDid"),
1980                            LexObjectProperty::String(LexString {
1981                                description: Some(CowStr::new_static(
1982                                    "The DID of the group chat owner.",
1983                                )),
1984                                format: Some(LexStringFormat::Did),
1985                                ..Default::default()
1986                            }),
1987                        );
1988                        map.insert(
1989                            SmolStr::new_static("rev"),
1990                            LexObjectProperty::String(LexString {
1991                                ..Default::default()
1992                            }),
1993                        );
1994                        map.insert(
1995                            SmolStr::new_static("subjectDid"),
1996                            LexObjectProperty::String(LexString {
1997                                description: Some(CowStr::new_static(
1998                                    "The DID of the member whose request was rejected.",
1999                                )),
2000                                format: Some(LexStringFormat::Did),
2001                                ..Default::default()
2002                            }),
2003                        );
2004                        map
2005                    },
2006                    ..Default::default()
2007                }),
2008            );
2009            map.insert(
2010                SmolStr::new_static("eventGroupChatMemberAdded"),
2011                LexUserType::Object(LexObject {
2012                    description: Some(
2013                        CowStr::new_static(
2014                            "Fired when a member is added to a group chat. Note that members are added in the 'request' state.",
2015                        ),
2016                    ),
2017                    required: Some(
2018                        vec![
2019                            SmolStr::new_static("actorDid"),
2020                            SmolStr::new_static("convoCreatedAt"),
2021                            SmolStr::new_static("convoId"),
2022                            SmolStr::new_static("createdAt"),
2023                            SmolStr::new_static("groupMemberCount"),
2024                            SmolStr::new_static("groupName"),
2025                            SmolStr::new_static("ownerDid"),
2026                            SmolStr::new_static("requestMembersCount"),
2027                            SmolStr::new_static("rev"),
2028                            SmolStr::new_static("subjectDid"),
2029                            SmolStr::new_static("subjectFollowsOwner")
2030                        ],
2031                    ),
2032                    properties: {
2033                        #[allow(unused_mut)]
2034                        let mut map = BTreeMap::new();
2035                        map.insert(
2036                            SmolStr::new_static("actorDid"),
2037                            LexObjectProperty::String(LexString {
2038                                description: Some(
2039                                    CowStr::new_static(
2040                                        "The DID of the actor performing the action. For this event, same as ownerDid.",
2041                                    ),
2042                                ),
2043                                format: Some(LexStringFormat::Did),
2044                                ..Default::default()
2045                            }),
2046                        );
2047                        map.insert(
2048                            SmolStr::new_static("convoCreatedAt"),
2049                            LexObjectProperty::String(LexString {
2050                                description: Some(
2051                                    CowStr::new_static("When the group was originally created."),
2052                                ),
2053                                format: Some(LexStringFormat::Datetime),
2054                                ..Default::default()
2055                            }),
2056                        );
2057                        map.insert(
2058                            SmolStr::new_static("convoId"),
2059                            LexObjectProperty::String(LexString { ..Default::default() }),
2060                        );
2061                        map.insert(
2062                            SmolStr::new_static("createdAt"),
2063                            LexObjectProperty::String(LexString {
2064                                format: Some(LexStringFormat::Datetime),
2065                                ..Default::default()
2066                            }),
2067                        );
2068                        map.insert(
2069                            SmolStr::new_static("groupMemberCount"),
2070                            LexObjectProperty::Integer(LexInteger {
2071                                ..Default::default()
2072                            }),
2073                        );
2074                        map.insert(
2075                            SmolStr::new_static("groupName"),
2076                            LexObjectProperty::String(LexString { ..Default::default() }),
2077                        );
2078                        map.insert(
2079                            SmolStr::new_static("ownerDid"),
2080                            LexObjectProperty::String(LexString {
2081                                description: Some(
2082                                    CowStr::new_static("The DID of the group chat owner."),
2083                                ),
2084                                format: Some(LexStringFormat::Did),
2085                                ..Default::default()
2086                            }),
2087                        );
2088                        map.insert(
2089                            SmolStr::new_static("requestMembersCount"),
2090                            LexObjectProperty::Integer(LexInteger {
2091                                ..Default::default()
2092                            }),
2093                        );
2094                        map.insert(
2095                            SmolStr::new_static("rev"),
2096                            LexObjectProperty::String(LexString { ..Default::default() }),
2097                        );
2098                        map.insert(
2099                            SmolStr::new_static("subjectDid"),
2100                            LexObjectProperty::String(LexString {
2101                                description: Some(
2102                                    CowStr::new_static("The DID of the member who was added."),
2103                                ),
2104                                format: Some(LexStringFormat::Did),
2105                                ..Default::default()
2106                            }),
2107                        );
2108                        map.insert(
2109                            SmolStr::new_static("subjectFollowsOwner"),
2110                            LexObjectProperty::Boolean(LexBoolean {
2111                                ..Default::default()
2112                            }),
2113                        );
2114                        map
2115                    },
2116                    ..Default::default()
2117                }),
2118            );
2119            map.insert(
2120                SmolStr::new_static("eventGroupChatMemberJoined"),
2121                LexUserType::Object(LexObject {
2122                    description: Some(
2123                        CowStr::new_static(
2124                            "Fired when a member joins a group chat via an join link that does not require approval.",
2125                        ),
2126                    ),
2127                    required: Some(
2128                        vec![
2129                            SmolStr::new_static("actorDid"),
2130                            SmolStr::new_static("convoCreatedAt"),
2131                            SmolStr::new_static("convoId"),
2132                            SmolStr::new_static("createdAt"),
2133                            SmolStr::new_static("groupMemberCount"),
2134                            SmolStr::new_static("groupName"),
2135                            SmolStr::new_static("joinLinkCode"),
2136                            SmolStr::new_static("ownerDid"), SmolStr::new_static("rev"),
2137                            SmolStr::new_static("subjectFollowsOwner")
2138                        ],
2139                    ),
2140                    properties: {
2141                        #[allow(unused_mut)]
2142                        let mut map = BTreeMap::new();
2143                        map.insert(
2144                            SmolStr::new_static("actorDid"),
2145                            LexObjectProperty::String(LexString {
2146                                description: Some(
2147                                    CowStr::new_static("The DID of the person joining."),
2148                                ),
2149                                format: Some(LexStringFormat::Did),
2150                                ..Default::default()
2151                            }),
2152                        );
2153                        map.insert(
2154                            SmolStr::new_static("convoCreatedAt"),
2155                            LexObjectProperty::String(LexString {
2156                                description: Some(
2157                                    CowStr::new_static("When the group was originally created."),
2158                                ),
2159                                format: Some(LexStringFormat::Datetime),
2160                                ..Default::default()
2161                            }),
2162                        );
2163                        map.insert(
2164                            SmolStr::new_static("convoId"),
2165                            LexObjectProperty::String(LexString { ..Default::default() }),
2166                        );
2167                        map.insert(
2168                            SmolStr::new_static("createdAt"),
2169                            LexObjectProperty::String(LexString {
2170                                format: Some(LexStringFormat::Datetime),
2171                                ..Default::default()
2172                            }),
2173                        );
2174                        map.insert(
2175                            SmolStr::new_static("groupMemberCount"),
2176                            LexObjectProperty::Integer(LexInteger {
2177                                ..Default::default()
2178                            }),
2179                        );
2180                        map.insert(
2181                            SmolStr::new_static("groupName"),
2182                            LexObjectProperty::String(LexString { ..Default::default() }),
2183                        );
2184                        map.insert(
2185                            SmolStr::new_static("joinLinkCode"),
2186                            LexObjectProperty::String(LexString {
2187                                description: Some(
2188                                    CowStr::new_static(
2189                                        "The code of the join link used to join.",
2190                                    ),
2191                                ),
2192                                ..Default::default()
2193                            }),
2194                        );
2195                        map.insert(
2196                            SmolStr::new_static("ownerDid"),
2197                            LexObjectProperty::String(LexString {
2198                                description: Some(
2199                                    CowStr::new_static("The DID of the group chat owner."),
2200                                ),
2201                                format: Some(LexStringFormat::Did),
2202                                ..Default::default()
2203                            }),
2204                        );
2205                        map.insert(
2206                            SmolStr::new_static("rev"),
2207                            LexObjectProperty::String(LexString { ..Default::default() }),
2208                        );
2209                        map.insert(
2210                            SmolStr::new_static("subjectFollowsOwner"),
2211                            LexObjectProperty::Boolean(LexBoolean {
2212                                ..Default::default()
2213                            }),
2214                        );
2215                        map
2216                    },
2217                    ..Default::default()
2218                }),
2219            );
2220            map.insert(
2221                SmolStr::new_static("eventGroupChatMemberLeft"),
2222                LexUserType::Object(LexObject {
2223                    description: Some(
2224                        CowStr::new_static(
2225                            "Fired when a member leaves or is removed from a group chat.",
2226                        ),
2227                    ),
2228                    required: Some(
2229                        vec![
2230                            SmolStr::new_static("actorDid"),
2231                            SmolStr::new_static("convoCreatedAt"),
2232                            SmolStr::new_static("convoId"),
2233                            SmolStr::new_static("createdAt"),
2234                            SmolStr::new_static("groupMemberCount"),
2235                            SmolStr::new_static("groupName"),
2236                            SmolStr::new_static("leaveMethod"),
2237                            SmolStr::new_static("ownerDid"), SmolStr::new_static("rev"),
2238                            SmolStr::new_static("subjectDid")
2239                        ],
2240                    ),
2241                    properties: {
2242                        #[allow(unused_mut)]
2243                        let mut map = BTreeMap::new();
2244                        map.insert(
2245                            SmolStr::new_static("actorDid"),
2246                            LexObjectProperty::String(LexString {
2247                                description: Some(
2248                                    CowStr::new_static(
2249                                        "The DID of the actor. For voluntary: the person leaving. For kicked: the owner.",
2250                                    ),
2251                                ),
2252                                format: Some(LexStringFormat::Did),
2253                                ..Default::default()
2254                            }),
2255                        );
2256                        map.insert(
2257                            SmolStr::new_static("convoCreatedAt"),
2258                            LexObjectProperty::String(LexString {
2259                                description: Some(
2260                                    CowStr::new_static("When the group was originally created."),
2261                                ),
2262                                format: Some(LexStringFormat::Datetime),
2263                                ..Default::default()
2264                            }),
2265                        );
2266                        map.insert(
2267                            SmolStr::new_static("convoId"),
2268                            LexObjectProperty::String(LexString { ..Default::default() }),
2269                        );
2270                        map.insert(
2271                            SmolStr::new_static("createdAt"),
2272                            LexObjectProperty::String(LexString {
2273                                format: Some(LexStringFormat::Datetime),
2274                                ..Default::default()
2275                            }),
2276                        );
2277                        map.insert(
2278                            SmolStr::new_static("groupMemberCount"),
2279                            LexObjectProperty::Integer(LexInteger {
2280                                ..Default::default()
2281                            }),
2282                        );
2283                        map.insert(
2284                            SmolStr::new_static("groupName"),
2285                            LexObjectProperty::String(LexString { ..Default::default() }),
2286                        );
2287                        map.insert(
2288                            SmolStr::new_static("leaveMethod"),
2289                            LexObjectProperty::String(LexString {
2290                                description: Some(
2291                                    CowStr::new_static("How the member left."),
2292                                ),
2293                                ..Default::default()
2294                            }),
2295                        );
2296                        map.insert(
2297                            SmolStr::new_static("ownerDid"),
2298                            LexObjectProperty::String(LexString {
2299                                description: Some(
2300                                    CowStr::new_static("The DID of the group chat owner."),
2301                                ),
2302                                format: Some(LexStringFormat::Did),
2303                                ..Default::default()
2304                            }),
2305                        );
2306                        map.insert(
2307                            SmolStr::new_static("rev"),
2308                            LexObjectProperty::String(LexString { ..Default::default() }),
2309                        );
2310                        map.insert(
2311                            SmolStr::new_static("subjectDid"),
2312                            LexObjectProperty::String(LexString {
2313                                description: Some(
2314                                    CowStr::new_static(
2315                                        "The DID of the member who left or was removed.",
2316                                    ),
2317                                ),
2318                                format: Some(LexStringFormat::Did),
2319                                ..Default::default()
2320                            }),
2321                        );
2322                        map
2323                    },
2324                    ..Default::default()
2325                }),
2326            );
2327            map.insert(
2328                SmolStr::new_static("eventGroupChatUpdated"),
2329                LexUserType::Object(LexObject {
2330                    description: Some(
2331                        CowStr::new_static(
2332                            "Fired when a group chat's metadata or status changes.",
2333                        ),
2334                    ),
2335                    required: Some(
2336                        vec![
2337                            SmolStr::new_static("actorDid"),
2338                            SmolStr::new_static("convoCreatedAt"),
2339                            SmolStr::new_static("convoId"),
2340                            SmolStr::new_static("createdAt"),
2341                            SmolStr::new_static("groupMemberCount"),
2342                            SmolStr::new_static("groupName"),
2343                            SmolStr::new_static("ownerDid"), SmolStr::new_static("rev"),
2344                            SmolStr::new_static("updateType")
2345                        ],
2346                    ),
2347                    properties: {
2348                        #[allow(unused_mut)]
2349                        let mut map = BTreeMap::new();
2350                        map.insert(
2351                            SmolStr::new_static("actorDid"),
2352                            LexObjectProperty::String(LexString {
2353                                description: Some(
2354                                    CowStr::new_static(
2355                                        "The DID of the actor performing the action (the owner).",
2356                                    ),
2357                                ),
2358                                format: Some(LexStringFormat::Did),
2359                                ..Default::default()
2360                            }),
2361                        );
2362                        map.insert(
2363                            SmolStr::new_static("convoCreatedAt"),
2364                            LexObjectProperty::String(LexString {
2365                                description: Some(
2366                                    CowStr::new_static("When the group was originally created."),
2367                                ),
2368                                format: Some(LexStringFormat::Datetime),
2369                                ..Default::default()
2370                            }),
2371                        );
2372                        map.insert(
2373                            SmolStr::new_static("convoId"),
2374                            LexObjectProperty::String(LexString { ..Default::default() }),
2375                        );
2376                        map.insert(
2377                            SmolStr::new_static("createdAt"),
2378                            LexObjectProperty::String(LexString {
2379                                format: Some(LexStringFormat::Datetime),
2380                                ..Default::default()
2381                            }),
2382                        );
2383                        map.insert(
2384                            SmolStr::new_static("groupMemberCount"),
2385                            LexObjectProperty::Integer(LexInteger {
2386                                ..Default::default()
2387                            }),
2388                        );
2389                        map.insert(
2390                            SmolStr::new_static("groupName"),
2391                            LexObjectProperty::String(LexString {
2392                                description: Some(
2393                                    CowStr::new_static("Current group name."),
2394                                ),
2395                                ..Default::default()
2396                            }),
2397                        );
2398                        map.insert(
2399                            SmolStr::new_static("joinLinkCode"),
2400                            LexObjectProperty::String(LexString {
2401                                description: Some(
2402                                    CowStr::new_static(
2403                                        "The code of the join link. Only present when updateType is join-link-related.",
2404                                    ),
2405                                ),
2406                                ..Default::default()
2407                            }),
2408                        );
2409                        map.insert(
2410                            SmolStr::new_static("joinLinkFollowersOnly"),
2411                            LexObjectProperty::Boolean(LexBoolean {
2412                                ..Default::default()
2413                            }),
2414                        );
2415                        map.insert(
2416                            SmolStr::new_static("joinLinkRequiresApproval"),
2417                            LexObjectProperty::Boolean(LexBoolean {
2418                                ..Default::default()
2419                            }),
2420                        );
2421                        map.insert(
2422                            SmolStr::new_static("lockReason"),
2423                            LexObjectProperty::String(LexString {
2424                                description: Some(
2425                                    CowStr::new_static(
2426                                        "Why the group was locked. Only present when updateType is 'locked'.",
2427                                    ),
2428                                ),
2429                                ..Default::default()
2430                            }),
2431                        );
2432                        map.insert(
2433                            SmolStr::new_static("newName"),
2434                            LexObjectProperty::String(LexString {
2435                                description: Some(
2436                                    CowStr::new_static(
2437                                        "The new group name. Only present when updateType is 'name_changed'.",
2438                                    ),
2439                                ),
2440                                ..Default::default()
2441                            }),
2442                        );
2443                        map.insert(
2444                            SmolStr::new_static("oldName"),
2445                            LexObjectProperty::String(LexString {
2446                                description: Some(
2447                                    CowStr::new_static(
2448                                        "The previous group name. Only present when updateType is 'name_changed'.",
2449                                    ),
2450                                ),
2451                                ..Default::default()
2452                            }),
2453                        );
2454                        map.insert(
2455                            SmolStr::new_static("ownerDid"),
2456                            LexObjectProperty::String(LexString {
2457                                description: Some(
2458                                    CowStr::new_static("The DID of the group chat owner."),
2459                                ),
2460                                format: Some(LexStringFormat::Did),
2461                                ..Default::default()
2462                            }),
2463                        );
2464                        map.insert(
2465                            SmolStr::new_static("rev"),
2466                            LexObjectProperty::String(LexString { ..Default::default() }),
2467                        );
2468                        map.insert(
2469                            SmolStr::new_static("updateType"),
2470                            LexObjectProperty::String(LexString {
2471                                description: Some(CowStr::new_static("What changed.")),
2472                                ..Default::default()
2473                            }),
2474                        );
2475                        map
2476                    },
2477                    ..Default::default()
2478                }),
2479            );
2480            map.insert(
2481                SmolStr::new_static("eventRateLimitExceeded"),
2482                LexUserType::Object(LexObject {
2483                    description: Some(CowStr::new_static(
2484                        "Fired when a user exceeds a rate limit.",
2485                    )),
2486                    required: Some(vec![
2487                        SmolStr::new_static("actorDid"),
2488                        SmolStr::new_static("createdAt"),
2489                        SmolStr::new_static("endpoint"),
2490                        SmolStr::new_static("rev"),
2491                    ]),
2492                    properties: {
2493                        #[allow(unused_mut)]
2494                        let mut map = BTreeMap::new();
2495                        map.insert(
2496                            SmolStr::new_static("actorDid"),
2497                            LexObjectProperty::String(LexString {
2498                                description: Some(CowStr::new_static(
2499                                    "The DID of the user who hit the rate limit.",
2500                                )),
2501                                format: Some(LexStringFormat::Did),
2502                                ..Default::default()
2503                            }),
2504                        );
2505                        map.insert(
2506                            SmolStr::new_static("createdAt"),
2507                            LexObjectProperty::String(LexString {
2508                                format: Some(LexStringFormat::Datetime),
2509                                ..Default::default()
2510                            }),
2511                        );
2512                        map.insert(
2513                            SmolStr::new_static("endpoint"),
2514                            LexObjectProperty::String(LexString {
2515                                description: Some(CowStr::new_static(
2516                                    "The NSID of the endpoint that was rate limited.",
2517                                )),
2518                                ..Default::default()
2519                            }),
2520                        );
2521                        map.insert(
2522                            SmolStr::new_static("rev"),
2523                            LexObjectProperty::String(LexString {
2524                                ..Default::default()
2525                            }),
2526                        );
2527                        map
2528                    },
2529                    ..Default::default()
2530                }),
2531            );
2532            map.insert(
2533                SmolStr::new_static("main"),
2534                LexUserType::XrpcSubscription(LexXrpcSubscription {
2535                    parameters: Some(
2536                        LexXrpcSubscriptionParameter::Params(LexXrpcParameters {
2537                            properties: {
2538                                #[allow(unused_mut)]
2539                                let mut map = BTreeMap::new();
2540                                map.insert(
2541                                    SmolStr::new_static("cursor"),
2542                                    LexXrpcParametersProperty::String(LexString {
2543                                        description: Some(
2544                                            CowStr::new_static(
2545                                                "The last known event seq number to backfill from. Use '2222222222222' to backfill from the beginning. Don't specify a cursor to listen only for new events.",
2546                                            ),
2547                                        ),
2548                                        ..Default::default()
2549                                    }),
2550                                );
2551                                map
2552                            },
2553                            ..Default::default()
2554                        }),
2555                    ),
2556                    ..Default::default()
2557                }),
2558            );
2559            map
2560        },
2561        ..Default::default()
2562    }
2563}
2564
2565pub mod event_convo_first_message_state {
2566
2567    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
2568    #[allow(unused)]
2569    use ::core::marker::PhantomData;
2570    mod sealed {
2571        pub trait Sealed {}
2572    }
2573    /// State trait tracking which required fields have been set
2574    pub trait State: sealed::Sealed {
2575        type ConvoId;
2576        type CreatedAt;
2577        type Recipients;
2578        type Rev;
2579        type User;
2580    }
2581    /// Empty state - all required fields are unset
2582    pub struct Empty(());
2583    impl sealed::Sealed for Empty {}
2584    impl State for Empty {
2585        type ConvoId = Unset;
2586        type CreatedAt = Unset;
2587        type Recipients = Unset;
2588        type Rev = Unset;
2589        type User = Unset;
2590    }
2591    ///State transition - sets the `convo_id` field to Set
2592    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
2593    impl<St: State> sealed::Sealed for SetConvoId<St> {}
2594    impl<St: State> State for SetConvoId<St> {
2595        type ConvoId = Set<members::convo_id>;
2596        type CreatedAt = St::CreatedAt;
2597        type Recipients = St::Recipients;
2598        type Rev = St::Rev;
2599        type User = St::User;
2600    }
2601    ///State transition - sets the `created_at` field to Set
2602    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
2603    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
2604    impl<St: State> State for SetCreatedAt<St> {
2605        type ConvoId = St::ConvoId;
2606        type CreatedAt = Set<members::created_at>;
2607        type Recipients = St::Recipients;
2608        type Rev = St::Rev;
2609        type User = St::User;
2610    }
2611    ///State transition - sets the `recipients` field to Set
2612    pub struct SetRecipients<St: State = Empty>(PhantomData<fn() -> St>);
2613    impl<St: State> sealed::Sealed for SetRecipients<St> {}
2614    impl<St: State> State for SetRecipients<St> {
2615        type ConvoId = St::ConvoId;
2616        type CreatedAt = St::CreatedAt;
2617        type Recipients = Set<members::recipients>;
2618        type Rev = St::Rev;
2619        type User = St::User;
2620    }
2621    ///State transition - sets the `rev` field to Set
2622    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
2623    impl<St: State> sealed::Sealed for SetRev<St> {}
2624    impl<St: State> State for SetRev<St> {
2625        type ConvoId = St::ConvoId;
2626        type CreatedAt = St::CreatedAt;
2627        type Recipients = St::Recipients;
2628        type Rev = Set<members::rev>;
2629        type User = St::User;
2630    }
2631    ///State transition - sets the `user` field to Set
2632    pub struct SetUser<St: State = Empty>(PhantomData<fn() -> St>);
2633    impl<St: State> sealed::Sealed for SetUser<St> {}
2634    impl<St: State> State for SetUser<St> {
2635        type ConvoId = St::ConvoId;
2636        type CreatedAt = St::CreatedAt;
2637        type Recipients = St::Recipients;
2638        type Rev = St::Rev;
2639        type User = Set<members::user>;
2640    }
2641    /// Marker types for field names
2642    #[allow(non_camel_case_types)]
2643    pub mod members {
2644        ///Marker type for the `convo_id` field
2645        pub struct convo_id(());
2646        ///Marker type for the `created_at` field
2647        pub struct created_at(());
2648        ///Marker type for the `recipients` field
2649        pub struct recipients(());
2650        ///Marker type for the `rev` field
2651        pub struct rev(());
2652        ///Marker type for the `user` field
2653        pub struct user(());
2654    }
2655}
2656
2657/// Builder for constructing an instance of this type.
2658pub struct EventConvoFirstMessageBuilder<
2659    St: event_convo_first_message_state::State,
2660    S: BosStr = DefaultStr,
2661> {
2662    _state: PhantomData<fn() -> St>,
2663    _fields: (
2664        Option<S>,
2665        Option<Datetime>,
2666        Option<S>,
2667        Option<Vec<Did<S>>>,
2668        Option<S>,
2669        Option<Did<S>>,
2670    ),
2671    _type: PhantomData<fn() -> S>,
2672}
2673
2674impl EventConvoFirstMessage<DefaultStr> {
2675    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
2676    pub fn new() -> EventConvoFirstMessageBuilder<event_convo_first_message_state::Empty, DefaultStr>
2677    {
2678        EventConvoFirstMessageBuilder::new()
2679    }
2680}
2681
2682impl<S: BosStr> EventConvoFirstMessage<S> {
2683    /// Create a new builder for this type
2684    pub fn builder() -> EventConvoFirstMessageBuilder<event_convo_first_message_state::Empty, S> {
2685        EventConvoFirstMessageBuilder::builder()
2686    }
2687}
2688
2689impl EventConvoFirstMessageBuilder<event_convo_first_message_state::Empty, DefaultStr> {
2690    /// Create a new builder with all fields unset, using the default string type, if needed
2691    pub fn new() -> Self {
2692        EventConvoFirstMessageBuilder {
2693            _state: PhantomData,
2694            _fields: (None, None, None, None, None, None),
2695            _type: PhantomData,
2696        }
2697    }
2698}
2699
2700impl<S: BosStr> EventConvoFirstMessageBuilder<event_convo_first_message_state::Empty, S> {
2701    /// Create a new builder with all fields unset
2702    pub fn builder() -> Self {
2703        EventConvoFirstMessageBuilder {
2704            _state: PhantomData,
2705            _fields: (None, None, None, None, None, None),
2706            _type: PhantomData,
2707        }
2708    }
2709}
2710
2711impl<St, S: BosStr> EventConvoFirstMessageBuilder<St, S>
2712where
2713    St: event_convo_first_message_state::State,
2714    St::ConvoId: event_convo_first_message_state::IsUnset,
2715{
2716    /// Set the `convoId` field (required)
2717    pub fn convo_id(
2718        mut self,
2719        value: impl Into<S>,
2720    ) -> EventConvoFirstMessageBuilder<event_convo_first_message_state::SetConvoId<St>, S> {
2721        self._fields.0 = Option::Some(value.into());
2722        EventConvoFirstMessageBuilder {
2723            _state: PhantomData,
2724            _fields: self._fields,
2725            _type: PhantomData,
2726        }
2727    }
2728}
2729
2730impl<St, S: BosStr> EventConvoFirstMessageBuilder<St, S>
2731where
2732    St: event_convo_first_message_state::State,
2733    St::CreatedAt: event_convo_first_message_state::IsUnset,
2734{
2735    /// Set the `createdAt` field (required)
2736    pub fn created_at(
2737        mut self,
2738        value: impl Into<Datetime>,
2739    ) -> EventConvoFirstMessageBuilder<event_convo_first_message_state::SetCreatedAt<St>, S> {
2740        self._fields.1 = Option::Some(value.into());
2741        EventConvoFirstMessageBuilder {
2742            _state: PhantomData,
2743            _fields: self._fields,
2744            _type: PhantomData,
2745        }
2746    }
2747}
2748
2749impl<St: event_convo_first_message_state::State, S: BosStr> EventConvoFirstMessageBuilder<St, S> {
2750    /// Set the `messageId` field (optional)
2751    pub fn message_id(mut self, value: impl Into<Option<S>>) -> Self {
2752        self._fields.2 = value.into();
2753        self
2754    }
2755    /// Set the `messageId` field to an Option value (optional)
2756    pub fn maybe_message_id(mut self, value: Option<S>) -> Self {
2757        self._fields.2 = value;
2758        self
2759    }
2760}
2761
2762impl<St, S: BosStr> EventConvoFirstMessageBuilder<St, S>
2763where
2764    St: event_convo_first_message_state::State,
2765    St::Recipients: event_convo_first_message_state::IsUnset,
2766{
2767    /// Set the `recipients` field (required)
2768    pub fn recipients(
2769        mut self,
2770        value: impl Into<Vec<Did<S>>>,
2771    ) -> EventConvoFirstMessageBuilder<event_convo_first_message_state::SetRecipients<St>, S> {
2772        self._fields.3 = Option::Some(value.into());
2773        EventConvoFirstMessageBuilder {
2774            _state: PhantomData,
2775            _fields: self._fields,
2776            _type: PhantomData,
2777        }
2778    }
2779}
2780
2781impl<St, S: BosStr> EventConvoFirstMessageBuilder<St, S>
2782where
2783    St: event_convo_first_message_state::State,
2784    St::Rev: event_convo_first_message_state::IsUnset,
2785{
2786    /// Set the `rev` field (required)
2787    pub fn rev(
2788        mut self,
2789        value: impl Into<S>,
2790    ) -> EventConvoFirstMessageBuilder<event_convo_first_message_state::SetRev<St>, S> {
2791        self._fields.4 = Option::Some(value.into());
2792        EventConvoFirstMessageBuilder {
2793            _state: PhantomData,
2794            _fields: self._fields,
2795            _type: PhantomData,
2796        }
2797    }
2798}
2799
2800impl<St, S: BosStr> EventConvoFirstMessageBuilder<St, S>
2801where
2802    St: event_convo_first_message_state::State,
2803    St::User: event_convo_first_message_state::IsUnset,
2804{
2805    /// Set the `user` field (required)
2806    pub fn user(
2807        mut self,
2808        value: impl Into<Did<S>>,
2809    ) -> EventConvoFirstMessageBuilder<event_convo_first_message_state::SetUser<St>, S> {
2810        self._fields.5 = Option::Some(value.into());
2811        EventConvoFirstMessageBuilder {
2812            _state: PhantomData,
2813            _fields: self._fields,
2814            _type: PhantomData,
2815        }
2816    }
2817}
2818
2819impl<St, S: BosStr> EventConvoFirstMessageBuilder<St, S>
2820where
2821    St: event_convo_first_message_state::State,
2822    St::ConvoId: event_convo_first_message_state::IsSet,
2823    St::CreatedAt: event_convo_first_message_state::IsSet,
2824    St::Recipients: event_convo_first_message_state::IsSet,
2825    St::Rev: event_convo_first_message_state::IsSet,
2826    St::User: event_convo_first_message_state::IsSet,
2827{
2828    /// Build the final struct.
2829    pub fn build(self) -> EventConvoFirstMessage<S> {
2830        EventConvoFirstMessage {
2831            convo_id: self._fields.0.unwrap(),
2832            created_at: self._fields.1.unwrap(),
2833            message_id: self._fields.2,
2834            recipients: self._fields.3.unwrap(),
2835            rev: self._fields.4.unwrap(),
2836            user: self._fields.5.unwrap(),
2837            extra_data: Default::default(),
2838        }
2839    }
2840    /// Build the final struct with custom extra_data.
2841    pub fn build_with_data(
2842        self,
2843        extra_data: BTreeMap<SmolStr, Data<S>>,
2844    ) -> EventConvoFirstMessage<S> {
2845        EventConvoFirstMessage {
2846            convo_id: self._fields.0.unwrap(),
2847            created_at: self._fields.1.unwrap(),
2848            message_id: self._fields.2,
2849            recipients: self._fields.3.unwrap(),
2850            rev: self._fields.4.unwrap(),
2851            user: self._fields.5.unwrap(),
2852            extra_data: Some(extra_data),
2853        }
2854    }
2855}
2856
2857pub mod event_group_chat_created_state {
2858
2859    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
2860    #[allow(unused)]
2861    use ::core::marker::PhantomData;
2862    mod sealed {
2863        pub trait Sealed {}
2864    }
2865    /// State trait tracking which required fields have been set
2866    pub trait State: sealed::Sealed {
2867        type ActorDid;
2868        type ConvoCreatedAt;
2869        type ConvoId;
2870        type CreatedAt;
2871        type GroupMemberCount;
2872        type GroupName;
2873        type InitialMemberDids;
2874        type OwnerDid;
2875        type Rev;
2876    }
2877    /// Empty state - all required fields are unset
2878    pub struct Empty(());
2879    impl sealed::Sealed for Empty {}
2880    impl State for Empty {
2881        type ActorDid = Unset;
2882        type ConvoCreatedAt = Unset;
2883        type ConvoId = Unset;
2884        type CreatedAt = Unset;
2885        type GroupMemberCount = Unset;
2886        type GroupName = Unset;
2887        type InitialMemberDids = Unset;
2888        type OwnerDid = Unset;
2889        type Rev = Unset;
2890    }
2891    ///State transition - sets the `actor_did` field to Set
2892    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
2893    impl<St: State> sealed::Sealed for SetActorDid<St> {}
2894    impl<St: State> State for SetActorDid<St> {
2895        type ActorDid = Set<members::actor_did>;
2896        type ConvoCreatedAt = St::ConvoCreatedAt;
2897        type ConvoId = St::ConvoId;
2898        type CreatedAt = St::CreatedAt;
2899        type GroupMemberCount = St::GroupMemberCount;
2900        type GroupName = St::GroupName;
2901        type InitialMemberDids = St::InitialMemberDids;
2902        type OwnerDid = St::OwnerDid;
2903        type Rev = St::Rev;
2904    }
2905    ///State transition - sets the `convo_created_at` field to Set
2906    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
2907    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
2908    impl<St: State> State for SetConvoCreatedAt<St> {
2909        type ActorDid = St::ActorDid;
2910        type ConvoCreatedAt = Set<members::convo_created_at>;
2911        type ConvoId = St::ConvoId;
2912        type CreatedAt = St::CreatedAt;
2913        type GroupMemberCount = St::GroupMemberCount;
2914        type GroupName = St::GroupName;
2915        type InitialMemberDids = St::InitialMemberDids;
2916        type OwnerDid = St::OwnerDid;
2917        type Rev = St::Rev;
2918    }
2919    ///State transition - sets the `convo_id` field to Set
2920    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
2921    impl<St: State> sealed::Sealed for SetConvoId<St> {}
2922    impl<St: State> State for SetConvoId<St> {
2923        type ActorDid = St::ActorDid;
2924        type ConvoCreatedAt = St::ConvoCreatedAt;
2925        type ConvoId = Set<members::convo_id>;
2926        type CreatedAt = St::CreatedAt;
2927        type GroupMemberCount = St::GroupMemberCount;
2928        type GroupName = St::GroupName;
2929        type InitialMemberDids = St::InitialMemberDids;
2930        type OwnerDid = St::OwnerDid;
2931        type Rev = St::Rev;
2932    }
2933    ///State transition - sets the `created_at` field to Set
2934    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
2935    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
2936    impl<St: State> State for SetCreatedAt<St> {
2937        type ActorDid = St::ActorDid;
2938        type ConvoCreatedAt = St::ConvoCreatedAt;
2939        type ConvoId = St::ConvoId;
2940        type CreatedAt = Set<members::created_at>;
2941        type GroupMemberCount = St::GroupMemberCount;
2942        type GroupName = St::GroupName;
2943        type InitialMemberDids = St::InitialMemberDids;
2944        type OwnerDid = St::OwnerDid;
2945        type Rev = St::Rev;
2946    }
2947    ///State transition - sets the `group_member_count` field to Set
2948    pub struct SetGroupMemberCount<St: State = Empty>(PhantomData<fn() -> St>);
2949    impl<St: State> sealed::Sealed for SetGroupMemberCount<St> {}
2950    impl<St: State> State for SetGroupMemberCount<St> {
2951        type ActorDid = St::ActorDid;
2952        type ConvoCreatedAt = St::ConvoCreatedAt;
2953        type ConvoId = St::ConvoId;
2954        type CreatedAt = St::CreatedAt;
2955        type GroupMemberCount = Set<members::group_member_count>;
2956        type GroupName = St::GroupName;
2957        type InitialMemberDids = St::InitialMemberDids;
2958        type OwnerDid = St::OwnerDid;
2959        type Rev = St::Rev;
2960    }
2961    ///State transition - sets the `group_name` field to Set
2962    pub struct SetGroupName<St: State = Empty>(PhantomData<fn() -> St>);
2963    impl<St: State> sealed::Sealed for SetGroupName<St> {}
2964    impl<St: State> State for SetGroupName<St> {
2965        type ActorDid = St::ActorDid;
2966        type ConvoCreatedAt = St::ConvoCreatedAt;
2967        type ConvoId = St::ConvoId;
2968        type CreatedAt = St::CreatedAt;
2969        type GroupMemberCount = St::GroupMemberCount;
2970        type GroupName = Set<members::group_name>;
2971        type InitialMemberDids = St::InitialMemberDids;
2972        type OwnerDid = St::OwnerDid;
2973        type Rev = St::Rev;
2974    }
2975    ///State transition - sets the `initial_member_dids` field to Set
2976    pub struct SetInitialMemberDids<St: State = Empty>(PhantomData<fn() -> St>);
2977    impl<St: State> sealed::Sealed for SetInitialMemberDids<St> {}
2978    impl<St: State> State for SetInitialMemberDids<St> {
2979        type ActorDid = St::ActorDid;
2980        type ConvoCreatedAt = St::ConvoCreatedAt;
2981        type ConvoId = St::ConvoId;
2982        type CreatedAt = St::CreatedAt;
2983        type GroupMemberCount = St::GroupMemberCount;
2984        type GroupName = St::GroupName;
2985        type InitialMemberDids = Set<members::initial_member_dids>;
2986        type OwnerDid = St::OwnerDid;
2987        type Rev = St::Rev;
2988    }
2989    ///State transition - sets the `owner_did` field to Set
2990    pub struct SetOwnerDid<St: State = Empty>(PhantomData<fn() -> St>);
2991    impl<St: State> sealed::Sealed for SetOwnerDid<St> {}
2992    impl<St: State> State for SetOwnerDid<St> {
2993        type ActorDid = St::ActorDid;
2994        type ConvoCreatedAt = St::ConvoCreatedAt;
2995        type ConvoId = St::ConvoId;
2996        type CreatedAt = St::CreatedAt;
2997        type GroupMemberCount = St::GroupMemberCount;
2998        type GroupName = St::GroupName;
2999        type InitialMemberDids = St::InitialMemberDids;
3000        type OwnerDid = Set<members::owner_did>;
3001        type Rev = St::Rev;
3002    }
3003    ///State transition - sets the `rev` field to Set
3004    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
3005    impl<St: State> sealed::Sealed for SetRev<St> {}
3006    impl<St: State> State for SetRev<St> {
3007        type ActorDid = St::ActorDid;
3008        type ConvoCreatedAt = St::ConvoCreatedAt;
3009        type ConvoId = St::ConvoId;
3010        type CreatedAt = St::CreatedAt;
3011        type GroupMemberCount = St::GroupMemberCount;
3012        type GroupName = St::GroupName;
3013        type InitialMemberDids = St::InitialMemberDids;
3014        type OwnerDid = St::OwnerDid;
3015        type Rev = Set<members::rev>;
3016    }
3017    /// Marker types for field names
3018    #[allow(non_camel_case_types)]
3019    pub mod members {
3020        ///Marker type for the `actor_did` field
3021        pub struct actor_did(());
3022        ///Marker type for the `convo_created_at` field
3023        pub struct convo_created_at(());
3024        ///Marker type for the `convo_id` field
3025        pub struct convo_id(());
3026        ///Marker type for the `created_at` field
3027        pub struct created_at(());
3028        ///Marker type for the `group_member_count` field
3029        pub struct group_member_count(());
3030        ///Marker type for the `group_name` field
3031        pub struct group_name(());
3032        ///Marker type for the `initial_member_dids` field
3033        pub struct initial_member_dids(());
3034        ///Marker type for the `owner_did` field
3035        pub struct owner_did(());
3036        ///Marker type for the `rev` field
3037        pub struct rev(());
3038    }
3039}
3040
3041/// Builder for constructing an instance of this type.
3042pub struct EventGroupChatCreatedBuilder<
3043    St: event_group_chat_created_state::State,
3044    S: BosStr = DefaultStr,
3045> {
3046    _state: PhantomData<fn() -> St>,
3047    _fields: (
3048        Option<Did<S>>,
3049        Option<Datetime>,
3050        Option<S>,
3051        Option<Datetime>,
3052        Option<i64>,
3053        Option<S>,
3054        Option<Vec<Did<S>>>,
3055        Option<Did<S>>,
3056        Option<S>,
3057    ),
3058    _type: PhantomData<fn() -> S>,
3059}
3060
3061impl EventGroupChatCreated<DefaultStr> {
3062    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
3063    pub fn new() -> EventGroupChatCreatedBuilder<event_group_chat_created_state::Empty, DefaultStr>
3064    {
3065        EventGroupChatCreatedBuilder::new()
3066    }
3067}
3068
3069impl<S: BosStr> EventGroupChatCreated<S> {
3070    /// Create a new builder for this type
3071    pub fn builder() -> EventGroupChatCreatedBuilder<event_group_chat_created_state::Empty, S> {
3072        EventGroupChatCreatedBuilder::builder()
3073    }
3074}
3075
3076impl EventGroupChatCreatedBuilder<event_group_chat_created_state::Empty, DefaultStr> {
3077    /// Create a new builder with all fields unset, using the default string type, if needed
3078    pub fn new() -> Self {
3079        EventGroupChatCreatedBuilder {
3080            _state: PhantomData,
3081            _fields: (None, None, None, None, None, None, None, None, None),
3082            _type: PhantomData,
3083        }
3084    }
3085}
3086
3087impl<S: BosStr> EventGroupChatCreatedBuilder<event_group_chat_created_state::Empty, S> {
3088    /// Create a new builder with all fields unset
3089    pub fn builder() -> Self {
3090        EventGroupChatCreatedBuilder {
3091            _state: PhantomData,
3092            _fields: (None, None, None, None, None, None, None, None, None),
3093            _type: PhantomData,
3094        }
3095    }
3096}
3097
3098impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3099where
3100    St: event_group_chat_created_state::State,
3101    St::ActorDid: event_group_chat_created_state::IsUnset,
3102{
3103    /// Set the `actorDid` field (required)
3104    pub fn actor_did(
3105        mut self,
3106        value: impl Into<Did<S>>,
3107    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetActorDid<St>, S> {
3108        self._fields.0 = Option::Some(value.into());
3109        EventGroupChatCreatedBuilder {
3110            _state: PhantomData,
3111            _fields: self._fields,
3112            _type: PhantomData,
3113        }
3114    }
3115}
3116
3117impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3118where
3119    St: event_group_chat_created_state::State,
3120    St::ConvoCreatedAt: event_group_chat_created_state::IsUnset,
3121{
3122    /// Set the `convoCreatedAt` field (required)
3123    pub fn convo_created_at(
3124        mut self,
3125        value: impl Into<Datetime>,
3126    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetConvoCreatedAt<St>, S>
3127    {
3128        self._fields.1 = Option::Some(value.into());
3129        EventGroupChatCreatedBuilder {
3130            _state: PhantomData,
3131            _fields: self._fields,
3132            _type: PhantomData,
3133        }
3134    }
3135}
3136
3137impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3138where
3139    St: event_group_chat_created_state::State,
3140    St::ConvoId: event_group_chat_created_state::IsUnset,
3141{
3142    /// Set the `convoId` field (required)
3143    pub fn convo_id(
3144        mut self,
3145        value: impl Into<S>,
3146    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetConvoId<St>, S> {
3147        self._fields.2 = Option::Some(value.into());
3148        EventGroupChatCreatedBuilder {
3149            _state: PhantomData,
3150            _fields: self._fields,
3151            _type: PhantomData,
3152        }
3153    }
3154}
3155
3156impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3157where
3158    St: event_group_chat_created_state::State,
3159    St::CreatedAt: event_group_chat_created_state::IsUnset,
3160{
3161    /// Set the `createdAt` field (required)
3162    pub fn created_at(
3163        mut self,
3164        value: impl Into<Datetime>,
3165    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetCreatedAt<St>, S> {
3166        self._fields.3 = Option::Some(value.into());
3167        EventGroupChatCreatedBuilder {
3168            _state: PhantomData,
3169            _fields: self._fields,
3170            _type: PhantomData,
3171        }
3172    }
3173}
3174
3175impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3176where
3177    St: event_group_chat_created_state::State,
3178    St::GroupMemberCount: event_group_chat_created_state::IsUnset,
3179{
3180    /// Set the `groupMemberCount` field (required)
3181    pub fn group_member_count(
3182        mut self,
3183        value: impl Into<i64>,
3184    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetGroupMemberCount<St>, S>
3185    {
3186        self._fields.4 = Option::Some(value.into());
3187        EventGroupChatCreatedBuilder {
3188            _state: PhantomData,
3189            _fields: self._fields,
3190            _type: PhantomData,
3191        }
3192    }
3193}
3194
3195impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3196where
3197    St: event_group_chat_created_state::State,
3198    St::GroupName: event_group_chat_created_state::IsUnset,
3199{
3200    /// Set the `groupName` field (required)
3201    pub fn group_name(
3202        mut self,
3203        value: impl Into<S>,
3204    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetGroupName<St>, S> {
3205        self._fields.5 = Option::Some(value.into());
3206        EventGroupChatCreatedBuilder {
3207            _state: PhantomData,
3208            _fields: self._fields,
3209            _type: PhantomData,
3210        }
3211    }
3212}
3213
3214impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3215where
3216    St: event_group_chat_created_state::State,
3217    St::InitialMemberDids: event_group_chat_created_state::IsUnset,
3218{
3219    /// Set the `initialMemberDids` field (required)
3220    pub fn initial_member_dids(
3221        mut self,
3222        value: impl Into<Vec<Did<S>>>,
3223    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetInitialMemberDids<St>, S>
3224    {
3225        self._fields.6 = Option::Some(value.into());
3226        EventGroupChatCreatedBuilder {
3227            _state: PhantomData,
3228            _fields: self._fields,
3229            _type: PhantomData,
3230        }
3231    }
3232}
3233
3234impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3235where
3236    St: event_group_chat_created_state::State,
3237    St::OwnerDid: event_group_chat_created_state::IsUnset,
3238{
3239    /// Set the `ownerDid` field (required)
3240    pub fn owner_did(
3241        mut self,
3242        value: impl Into<Did<S>>,
3243    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetOwnerDid<St>, S> {
3244        self._fields.7 = Option::Some(value.into());
3245        EventGroupChatCreatedBuilder {
3246            _state: PhantomData,
3247            _fields: self._fields,
3248            _type: PhantomData,
3249        }
3250    }
3251}
3252
3253impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3254where
3255    St: event_group_chat_created_state::State,
3256    St::Rev: event_group_chat_created_state::IsUnset,
3257{
3258    /// Set the `rev` field (required)
3259    pub fn rev(
3260        mut self,
3261        value: impl Into<S>,
3262    ) -> EventGroupChatCreatedBuilder<event_group_chat_created_state::SetRev<St>, S> {
3263        self._fields.8 = Option::Some(value.into());
3264        EventGroupChatCreatedBuilder {
3265            _state: PhantomData,
3266            _fields: self._fields,
3267            _type: PhantomData,
3268        }
3269    }
3270}
3271
3272impl<St, S: BosStr> EventGroupChatCreatedBuilder<St, S>
3273where
3274    St: event_group_chat_created_state::State,
3275    St::ActorDid: event_group_chat_created_state::IsSet,
3276    St::ConvoCreatedAt: event_group_chat_created_state::IsSet,
3277    St::ConvoId: event_group_chat_created_state::IsSet,
3278    St::CreatedAt: event_group_chat_created_state::IsSet,
3279    St::GroupMemberCount: event_group_chat_created_state::IsSet,
3280    St::GroupName: event_group_chat_created_state::IsSet,
3281    St::InitialMemberDids: event_group_chat_created_state::IsSet,
3282    St::OwnerDid: event_group_chat_created_state::IsSet,
3283    St::Rev: event_group_chat_created_state::IsSet,
3284{
3285    /// Build the final struct.
3286    pub fn build(self) -> EventGroupChatCreated<S> {
3287        EventGroupChatCreated {
3288            actor_did: self._fields.0.unwrap(),
3289            convo_created_at: self._fields.1.unwrap(),
3290            convo_id: self._fields.2.unwrap(),
3291            created_at: self._fields.3.unwrap(),
3292            group_member_count: self._fields.4.unwrap(),
3293            group_name: self._fields.5.unwrap(),
3294            initial_member_dids: self._fields.6.unwrap(),
3295            owner_did: self._fields.7.unwrap(),
3296            rev: self._fields.8.unwrap(),
3297            extra_data: Default::default(),
3298        }
3299    }
3300    /// Build the final struct with custom extra_data.
3301    pub fn build_with_data(
3302        self,
3303        extra_data: BTreeMap<SmolStr, Data<S>>,
3304    ) -> EventGroupChatCreated<S> {
3305        EventGroupChatCreated {
3306            actor_did: self._fields.0.unwrap(),
3307            convo_created_at: self._fields.1.unwrap(),
3308            convo_id: self._fields.2.unwrap(),
3309            created_at: self._fields.3.unwrap(),
3310            group_member_count: self._fields.4.unwrap(),
3311            group_name: self._fields.5.unwrap(),
3312            initial_member_dids: self._fields.6.unwrap(),
3313            owner_did: self._fields.7.unwrap(),
3314            rev: self._fields.8.unwrap(),
3315            extra_data: Some(extra_data),
3316        }
3317    }
3318}
3319
3320pub mod event_group_chat_join_request_state {
3321
3322    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
3323    #[allow(unused)]
3324    use ::core::marker::PhantomData;
3325    mod sealed {
3326        pub trait Sealed {}
3327    }
3328    /// State trait tracking which required fields have been set
3329    pub trait State: sealed::Sealed {
3330        type ActorDid;
3331        type ConvoCreatedAt;
3332        type ConvoId;
3333        type CreatedAt;
3334        type GroupMemberCount;
3335        type GroupName;
3336        type JoinLinkCode;
3337        type OwnerDid;
3338        type Rev;
3339        type SubjectFollowsOwner;
3340    }
3341    /// Empty state - all required fields are unset
3342    pub struct Empty(());
3343    impl sealed::Sealed for Empty {}
3344    impl State for Empty {
3345        type ActorDid = Unset;
3346        type ConvoCreatedAt = Unset;
3347        type ConvoId = Unset;
3348        type CreatedAt = Unset;
3349        type GroupMemberCount = Unset;
3350        type GroupName = Unset;
3351        type JoinLinkCode = Unset;
3352        type OwnerDid = Unset;
3353        type Rev = Unset;
3354        type SubjectFollowsOwner = Unset;
3355    }
3356    ///State transition - sets the `actor_did` field to Set
3357    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
3358    impl<St: State> sealed::Sealed for SetActorDid<St> {}
3359    impl<St: State> State for SetActorDid<St> {
3360        type ActorDid = Set<members::actor_did>;
3361        type ConvoCreatedAt = St::ConvoCreatedAt;
3362        type ConvoId = St::ConvoId;
3363        type CreatedAt = St::CreatedAt;
3364        type GroupMemberCount = St::GroupMemberCount;
3365        type GroupName = St::GroupName;
3366        type JoinLinkCode = St::JoinLinkCode;
3367        type OwnerDid = St::OwnerDid;
3368        type Rev = St::Rev;
3369        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3370    }
3371    ///State transition - sets the `convo_created_at` field to Set
3372    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
3373    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
3374    impl<St: State> State for SetConvoCreatedAt<St> {
3375        type ActorDid = St::ActorDid;
3376        type ConvoCreatedAt = Set<members::convo_created_at>;
3377        type ConvoId = St::ConvoId;
3378        type CreatedAt = St::CreatedAt;
3379        type GroupMemberCount = St::GroupMemberCount;
3380        type GroupName = St::GroupName;
3381        type JoinLinkCode = St::JoinLinkCode;
3382        type OwnerDid = St::OwnerDid;
3383        type Rev = St::Rev;
3384        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3385    }
3386    ///State transition - sets the `convo_id` field to Set
3387    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
3388    impl<St: State> sealed::Sealed for SetConvoId<St> {}
3389    impl<St: State> State for SetConvoId<St> {
3390        type ActorDid = St::ActorDid;
3391        type ConvoCreatedAt = St::ConvoCreatedAt;
3392        type ConvoId = Set<members::convo_id>;
3393        type CreatedAt = St::CreatedAt;
3394        type GroupMemberCount = St::GroupMemberCount;
3395        type GroupName = St::GroupName;
3396        type JoinLinkCode = St::JoinLinkCode;
3397        type OwnerDid = St::OwnerDid;
3398        type Rev = St::Rev;
3399        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3400    }
3401    ///State transition - sets the `created_at` field to Set
3402    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
3403    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
3404    impl<St: State> State for SetCreatedAt<St> {
3405        type ActorDid = St::ActorDid;
3406        type ConvoCreatedAt = St::ConvoCreatedAt;
3407        type ConvoId = St::ConvoId;
3408        type CreatedAt = Set<members::created_at>;
3409        type GroupMemberCount = St::GroupMemberCount;
3410        type GroupName = St::GroupName;
3411        type JoinLinkCode = St::JoinLinkCode;
3412        type OwnerDid = St::OwnerDid;
3413        type Rev = St::Rev;
3414        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3415    }
3416    ///State transition - sets the `group_member_count` field to Set
3417    pub struct SetGroupMemberCount<St: State = Empty>(PhantomData<fn() -> St>);
3418    impl<St: State> sealed::Sealed for SetGroupMemberCount<St> {}
3419    impl<St: State> State for SetGroupMemberCount<St> {
3420        type ActorDid = St::ActorDid;
3421        type ConvoCreatedAt = St::ConvoCreatedAt;
3422        type ConvoId = St::ConvoId;
3423        type CreatedAt = St::CreatedAt;
3424        type GroupMemberCount = Set<members::group_member_count>;
3425        type GroupName = St::GroupName;
3426        type JoinLinkCode = St::JoinLinkCode;
3427        type OwnerDid = St::OwnerDid;
3428        type Rev = St::Rev;
3429        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3430    }
3431    ///State transition - sets the `group_name` field to Set
3432    pub struct SetGroupName<St: State = Empty>(PhantomData<fn() -> St>);
3433    impl<St: State> sealed::Sealed for SetGroupName<St> {}
3434    impl<St: State> State for SetGroupName<St> {
3435        type ActorDid = St::ActorDid;
3436        type ConvoCreatedAt = St::ConvoCreatedAt;
3437        type ConvoId = St::ConvoId;
3438        type CreatedAt = St::CreatedAt;
3439        type GroupMemberCount = St::GroupMemberCount;
3440        type GroupName = Set<members::group_name>;
3441        type JoinLinkCode = St::JoinLinkCode;
3442        type OwnerDid = St::OwnerDid;
3443        type Rev = St::Rev;
3444        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3445    }
3446    ///State transition - sets the `join_link_code` field to Set
3447    pub struct SetJoinLinkCode<St: State = Empty>(PhantomData<fn() -> St>);
3448    impl<St: State> sealed::Sealed for SetJoinLinkCode<St> {}
3449    impl<St: State> State for SetJoinLinkCode<St> {
3450        type ActorDid = St::ActorDid;
3451        type ConvoCreatedAt = St::ConvoCreatedAt;
3452        type ConvoId = St::ConvoId;
3453        type CreatedAt = St::CreatedAt;
3454        type GroupMemberCount = St::GroupMemberCount;
3455        type GroupName = St::GroupName;
3456        type JoinLinkCode = Set<members::join_link_code>;
3457        type OwnerDid = St::OwnerDid;
3458        type Rev = St::Rev;
3459        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3460    }
3461    ///State transition - sets the `owner_did` field to Set
3462    pub struct SetOwnerDid<St: State = Empty>(PhantomData<fn() -> St>);
3463    impl<St: State> sealed::Sealed for SetOwnerDid<St> {}
3464    impl<St: State> State for SetOwnerDid<St> {
3465        type ActorDid = St::ActorDid;
3466        type ConvoCreatedAt = St::ConvoCreatedAt;
3467        type ConvoId = St::ConvoId;
3468        type CreatedAt = St::CreatedAt;
3469        type GroupMemberCount = St::GroupMemberCount;
3470        type GroupName = St::GroupName;
3471        type JoinLinkCode = St::JoinLinkCode;
3472        type OwnerDid = Set<members::owner_did>;
3473        type Rev = St::Rev;
3474        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3475    }
3476    ///State transition - sets the `rev` field to Set
3477    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
3478    impl<St: State> sealed::Sealed for SetRev<St> {}
3479    impl<St: State> State for SetRev<St> {
3480        type ActorDid = St::ActorDid;
3481        type ConvoCreatedAt = St::ConvoCreatedAt;
3482        type ConvoId = St::ConvoId;
3483        type CreatedAt = St::CreatedAt;
3484        type GroupMemberCount = St::GroupMemberCount;
3485        type GroupName = St::GroupName;
3486        type JoinLinkCode = St::JoinLinkCode;
3487        type OwnerDid = St::OwnerDid;
3488        type Rev = Set<members::rev>;
3489        type SubjectFollowsOwner = St::SubjectFollowsOwner;
3490    }
3491    ///State transition - sets the `subject_follows_owner` field to Set
3492    pub struct SetSubjectFollowsOwner<St: State = Empty>(PhantomData<fn() -> St>);
3493    impl<St: State> sealed::Sealed for SetSubjectFollowsOwner<St> {}
3494    impl<St: State> State for SetSubjectFollowsOwner<St> {
3495        type ActorDid = St::ActorDid;
3496        type ConvoCreatedAt = St::ConvoCreatedAt;
3497        type ConvoId = St::ConvoId;
3498        type CreatedAt = St::CreatedAt;
3499        type GroupMemberCount = St::GroupMemberCount;
3500        type GroupName = St::GroupName;
3501        type JoinLinkCode = St::JoinLinkCode;
3502        type OwnerDid = St::OwnerDid;
3503        type Rev = St::Rev;
3504        type SubjectFollowsOwner = Set<members::subject_follows_owner>;
3505    }
3506    /// Marker types for field names
3507    #[allow(non_camel_case_types)]
3508    pub mod members {
3509        ///Marker type for the `actor_did` field
3510        pub struct actor_did(());
3511        ///Marker type for the `convo_created_at` field
3512        pub struct convo_created_at(());
3513        ///Marker type for the `convo_id` field
3514        pub struct convo_id(());
3515        ///Marker type for the `created_at` field
3516        pub struct created_at(());
3517        ///Marker type for the `group_member_count` field
3518        pub struct group_member_count(());
3519        ///Marker type for the `group_name` field
3520        pub struct group_name(());
3521        ///Marker type for the `join_link_code` field
3522        pub struct join_link_code(());
3523        ///Marker type for the `owner_did` field
3524        pub struct owner_did(());
3525        ///Marker type for the `rev` field
3526        pub struct rev(());
3527        ///Marker type for the `subject_follows_owner` field
3528        pub struct subject_follows_owner(());
3529    }
3530}
3531
3532/// Builder for constructing an instance of this type.
3533pub struct EventGroupChatJoinRequestBuilder<
3534    St: event_group_chat_join_request_state::State,
3535    S: BosStr = DefaultStr,
3536> {
3537    _state: PhantomData<fn() -> St>,
3538    _fields: (
3539        Option<Did<S>>,
3540        Option<Datetime>,
3541        Option<S>,
3542        Option<Datetime>,
3543        Option<i64>,
3544        Option<S>,
3545        Option<S>,
3546        Option<Did<S>>,
3547        Option<S>,
3548        Option<bool>,
3549    ),
3550    _type: PhantomData<fn() -> S>,
3551}
3552
3553impl EventGroupChatJoinRequest<DefaultStr> {
3554    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
3555    pub fn new()
3556    -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::Empty, DefaultStr>
3557    {
3558        EventGroupChatJoinRequestBuilder::new()
3559    }
3560}
3561
3562impl<S: BosStr> EventGroupChatJoinRequest<S> {
3563    /// Create a new builder for this type
3564    pub fn builder()
3565    -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::Empty, S> {
3566        EventGroupChatJoinRequestBuilder::builder()
3567    }
3568}
3569
3570impl EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::Empty, DefaultStr> {
3571    /// Create a new builder with all fields unset, using the default string type, if needed
3572    pub fn new() -> Self {
3573        EventGroupChatJoinRequestBuilder {
3574            _state: PhantomData,
3575            _fields: (None, None, None, None, None, None, None, None, None, None),
3576            _type: PhantomData,
3577        }
3578    }
3579}
3580
3581impl<S: BosStr> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::Empty, S> {
3582    /// Create a new builder with all fields unset
3583    pub fn builder() -> Self {
3584        EventGroupChatJoinRequestBuilder {
3585            _state: PhantomData,
3586            _fields: (None, None, None, None, None, None, None, None, None, None),
3587            _type: PhantomData,
3588        }
3589    }
3590}
3591
3592impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3593where
3594    St: event_group_chat_join_request_state::State,
3595    St::ActorDid: event_group_chat_join_request_state::IsUnset,
3596{
3597    /// Set the `actorDid` field (required)
3598    pub fn actor_did(
3599        mut self,
3600        value: impl Into<Did<S>>,
3601    ) -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::SetActorDid<St>, S>
3602    {
3603        self._fields.0 = Option::Some(value.into());
3604        EventGroupChatJoinRequestBuilder {
3605            _state: PhantomData,
3606            _fields: self._fields,
3607            _type: PhantomData,
3608        }
3609    }
3610}
3611
3612impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3613where
3614    St: event_group_chat_join_request_state::State,
3615    St::ConvoCreatedAt: event_group_chat_join_request_state::IsUnset,
3616{
3617    /// Set the `convoCreatedAt` field (required)
3618    pub fn convo_created_at(
3619        mut self,
3620        value: impl Into<Datetime>,
3621    ) -> EventGroupChatJoinRequestBuilder<
3622        event_group_chat_join_request_state::SetConvoCreatedAt<St>,
3623        S,
3624    > {
3625        self._fields.1 = Option::Some(value.into());
3626        EventGroupChatJoinRequestBuilder {
3627            _state: PhantomData,
3628            _fields: self._fields,
3629            _type: PhantomData,
3630        }
3631    }
3632}
3633
3634impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3635where
3636    St: event_group_chat_join_request_state::State,
3637    St::ConvoId: event_group_chat_join_request_state::IsUnset,
3638{
3639    /// Set the `convoId` field (required)
3640    pub fn convo_id(
3641        mut self,
3642        value: impl Into<S>,
3643    ) -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::SetConvoId<St>, S>
3644    {
3645        self._fields.2 = Option::Some(value.into());
3646        EventGroupChatJoinRequestBuilder {
3647            _state: PhantomData,
3648            _fields: self._fields,
3649            _type: PhantomData,
3650        }
3651    }
3652}
3653
3654impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3655where
3656    St: event_group_chat_join_request_state::State,
3657    St::CreatedAt: event_group_chat_join_request_state::IsUnset,
3658{
3659    /// Set the `createdAt` field (required)
3660    pub fn created_at(
3661        mut self,
3662        value: impl Into<Datetime>,
3663    ) -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::SetCreatedAt<St>, S>
3664    {
3665        self._fields.3 = Option::Some(value.into());
3666        EventGroupChatJoinRequestBuilder {
3667            _state: PhantomData,
3668            _fields: self._fields,
3669            _type: PhantomData,
3670        }
3671    }
3672}
3673
3674impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3675where
3676    St: event_group_chat_join_request_state::State,
3677    St::GroupMemberCount: event_group_chat_join_request_state::IsUnset,
3678{
3679    /// Set the `groupMemberCount` field (required)
3680    pub fn group_member_count(
3681        mut self,
3682        value: impl Into<i64>,
3683    ) -> EventGroupChatJoinRequestBuilder<
3684        event_group_chat_join_request_state::SetGroupMemberCount<St>,
3685        S,
3686    > {
3687        self._fields.4 = Option::Some(value.into());
3688        EventGroupChatJoinRequestBuilder {
3689            _state: PhantomData,
3690            _fields: self._fields,
3691            _type: PhantomData,
3692        }
3693    }
3694}
3695
3696impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3697where
3698    St: event_group_chat_join_request_state::State,
3699    St::GroupName: event_group_chat_join_request_state::IsUnset,
3700{
3701    /// Set the `groupName` field (required)
3702    pub fn group_name(
3703        mut self,
3704        value: impl Into<S>,
3705    ) -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::SetGroupName<St>, S>
3706    {
3707        self._fields.5 = Option::Some(value.into());
3708        EventGroupChatJoinRequestBuilder {
3709            _state: PhantomData,
3710            _fields: self._fields,
3711            _type: PhantomData,
3712        }
3713    }
3714}
3715
3716impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3717where
3718    St: event_group_chat_join_request_state::State,
3719    St::JoinLinkCode: event_group_chat_join_request_state::IsUnset,
3720{
3721    /// Set the `joinLinkCode` field (required)
3722    pub fn join_link_code(
3723        mut self,
3724        value: impl Into<S>,
3725    ) -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::SetJoinLinkCode<St>, S>
3726    {
3727        self._fields.6 = Option::Some(value.into());
3728        EventGroupChatJoinRequestBuilder {
3729            _state: PhantomData,
3730            _fields: self._fields,
3731            _type: PhantomData,
3732        }
3733    }
3734}
3735
3736impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3737where
3738    St: event_group_chat_join_request_state::State,
3739    St::OwnerDid: event_group_chat_join_request_state::IsUnset,
3740{
3741    /// Set the `ownerDid` field (required)
3742    pub fn owner_did(
3743        mut self,
3744        value: impl Into<Did<S>>,
3745    ) -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::SetOwnerDid<St>, S>
3746    {
3747        self._fields.7 = Option::Some(value.into());
3748        EventGroupChatJoinRequestBuilder {
3749            _state: PhantomData,
3750            _fields: self._fields,
3751            _type: PhantomData,
3752        }
3753    }
3754}
3755
3756impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3757where
3758    St: event_group_chat_join_request_state::State,
3759    St::Rev: event_group_chat_join_request_state::IsUnset,
3760{
3761    /// Set the `rev` field (required)
3762    pub fn rev(
3763        mut self,
3764        value: impl Into<S>,
3765    ) -> EventGroupChatJoinRequestBuilder<event_group_chat_join_request_state::SetRev<St>, S> {
3766        self._fields.8 = Option::Some(value.into());
3767        EventGroupChatJoinRequestBuilder {
3768            _state: PhantomData,
3769            _fields: self._fields,
3770            _type: PhantomData,
3771        }
3772    }
3773}
3774
3775impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3776where
3777    St: event_group_chat_join_request_state::State,
3778    St::SubjectFollowsOwner: event_group_chat_join_request_state::IsUnset,
3779{
3780    /// Set the `subjectFollowsOwner` field (required)
3781    pub fn subject_follows_owner(
3782        mut self,
3783        value: impl Into<bool>,
3784    ) -> EventGroupChatJoinRequestBuilder<
3785        event_group_chat_join_request_state::SetSubjectFollowsOwner<St>,
3786        S,
3787    > {
3788        self._fields.9 = Option::Some(value.into());
3789        EventGroupChatJoinRequestBuilder {
3790            _state: PhantomData,
3791            _fields: self._fields,
3792            _type: PhantomData,
3793        }
3794    }
3795}
3796
3797impl<St, S: BosStr> EventGroupChatJoinRequestBuilder<St, S>
3798where
3799    St: event_group_chat_join_request_state::State,
3800    St::ActorDid: event_group_chat_join_request_state::IsSet,
3801    St::ConvoCreatedAt: event_group_chat_join_request_state::IsSet,
3802    St::ConvoId: event_group_chat_join_request_state::IsSet,
3803    St::CreatedAt: event_group_chat_join_request_state::IsSet,
3804    St::GroupMemberCount: event_group_chat_join_request_state::IsSet,
3805    St::GroupName: event_group_chat_join_request_state::IsSet,
3806    St::JoinLinkCode: event_group_chat_join_request_state::IsSet,
3807    St::OwnerDid: event_group_chat_join_request_state::IsSet,
3808    St::Rev: event_group_chat_join_request_state::IsSet,
3809    St::SubjectFollowsOwner: event_group_chat_join_request_state::IsSet,
3810{
3811    /// Build the final struct.
3812    pub fn build(self) -> EventGroupChatJoinRequest<S> {
3813        EventGroupChatJoinRequest {
3814            actor_did: self._fields.0.unwrap(),
3815            convo_created_at: self._fields.1.unwrap(),
3816            convo_id: self._fields.2.unwrap(),
3817            created_at: self._fields.3.unwrap(),
3818            group_member_count: self._fields.4.unwrap(),
3819            group_name: self._fields.5.unwrap(),
3820            join_link_code: self._fields.6.unwrap(),
3821            owner_did: self._fields.7.unwrap(),
3822            rev: self._fields.8.unwrap(),
3823            subject_follows_owner: self._fields.9.unwrap(),
3824            extra_data: Default::default(),
3825        }
3826    }
3827    /// Build the final struct with custom extra_data.
3828    pub fn build_with_data(
3829        self,
3830        extra_data: BTreeMap<SmolStr, Data<S>>,
3831    ) -> EventGroupChatJoinRequest<S> {
3832        EventGroupChatJoinRequest {
3833            actor_did: self._fields.0.unwrap(),
3834            convo_created_at: self._fields.1.unwrap(),
3835            convo_id: self._fields.2.unwrap(),
3836            created_at: self._fields.3.unwrap(),
3837            group_member_count: self._fields.4.unwrap(),
3838            group_name: self._fields.5.unwrap(),
3839            join_link_code: self._fields.6.unwrap(),
3840            owner_did: self._fields.7.unwrap(),
3841            rev: self._fields.8.unwrap(),
3842            subject_follows_owner: self._fields.9.unwrap(),
3843            extra_data: Some(extra_data),
3844        }
3845    }
3846}
3847
3848pub mod event_group_chat_join_request_approved_state {
3849
3850    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
3851    #[allow(unused)]
3852    use ::core::marker::PhantomData;
3853    mod sealed {
3854        pub trait Sealed {}
3855    }
3856    /// State trait tracking which required fields have been set
3857    pub trait State: sealed::Sealed {
3858        type ActorDid;
3859        type ConvoCreatedAt;
3860        type ConvoId;
3861        type CreatedAt;
3862        type GroupMemberCount;
3863        type GroupName;
3864        type OwnerDid;
3865        type Rev;
3866        type SubjectDid;
3867    }
3868    /// Empty state - all required fields are unset
3869    pub struct Empty(());
3870    impl sealed::Sealed for Empty {}
3871    impl State for Empty {
3872        type ActorDid = Unset;
3873        type ConvoCreatedAt = Unset;
3874        type ConvoId = Unset;
3875        type CreatedAt = Unset;
3876        type GroupMemberCount = Unset;
3877        type GroupName = Unset;
3878        type OwnerDid = Unset;
3879        type Rev = Unset;
3880        type SubjectDid = Unset;
3881    }
3882    ///State transition - sets the `actor_did` field to Set
3883    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
3884    impl<St: State> sealed::Sealed for SetActorDid<St> {}
3885    impl<St: State> State for SetActorDid<St> {
3886        type ActorDid = Set<members::actor_did>;
3887        type ConvoCreatedAt = St::ConvoCreatedAt;
3888        type ConvoId = St::ConvoId;
3889        type CreatedAt = St::CreatedAt;
3890        type GroupMemberCount = St::GroupMemberCount;
3891        type GroupName = St::GroupName;
3892        type OwnerDid = St::OwnerDid;
3893        type Rev = St::Rev;
3894        type SubjectDid = St::SubjectDid;
3895    }
3896    ///State transition - sets the `convo_created_at` field to Set
3897    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
3898    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
3899    impl<St: State> State for SetConvoCreatedAt<St> {
3900        type ActorDid = St::ActorDid;
3901        type ConvoCreatedAt = Set<members::convo_created_at>;
3902        type ConvoId = St::ConvoId;
3903        type CreatedAt = St::CreatedAt;
3904        type GroupMemberCount = St::GroupMemberCount;
3905        type GroupName = St::GroupName;
3906        type OwnerDid = St::OwnerDid;
3907        type Rev = St::Rev;
3908        type SubjectDid = St::SubjectDid;
3909    }
3910    ///State transition - sets the `convo_id` field to Set
3911    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
3912    impl<St: State> sealed::Sealed for SetConvoId<St> {}
3913    impl<St: State> State for SetConvoId<St> {
3914        type ActorDid = St::ActorDid;
3915        type ConvoCreatedAt = St::ConvoCreatedAt;
3916        type ConvoId = Set<members::convo_id>;
3917        type CreatedAt = St::CreatedAt;
3918        type GroupMemberCount = St::GroupMemberCount;
3919        type GroupName = St::GroupName;
3920        type OwnerDid = St::OwnerDid;
3921        type Rev = St::Rev;
3922        type SubjectDid = St::SubjectDid;
3923    }
3924    ///State transition - sets the `created_at` field to Set
3925    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
3926    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
3927    impl<St: State> State for SetCreatedAt<St> {
3928        type ActorDid = St::ActorDid;
3929        type ConvoCreatedAt = St::ConvoCreatedAt;
3930        type ConvoId = St::ConvoId;
3931        type CreatedAt = Set<members::created_at>;
3932        type GroupMemberCount = St::GroupMemberCount;
3933        type GroupName = St::GroupName;
3934        type OwnerDid = St::OwnerDid;
3935        type Rev = St::Rev;
3936        type SubjectDid = St::SubjectDid;
3937    }
3938    ///State transition - sets the `group_member_count` field to Set
3939    pub struct SetGroupMemberCount<St: State = Empty>(PhantomData<fn() -> St>);
3940    impl<St: State> sealed::Sealed for SetGroupMemberCount<St> {}
3941    impl<St: State> State for SetGroupMemberCount<St> {
3942        type ActorDid = St::ActorDid;
3943        type ConvoCreatedAt = St::ConvoCreatedAt;
3944        type ConvoId = St::ConvoId;
3945        type CreatedAt = St::CreatedAt;
3946        type GroupMemberCount = Set<members::group_member_count>;
3947        type GroupName = St::GroupName;
3948        type OwnerDid = St::OwnerDid;
3949        type Rev = St::Rev;
3950        type SubjectDid = St::SubjectDid;
3951    }
3952    ///State transition - sets the `group_name` field to Set
3953    pub struct SetGroupName<St: State = Empty>(PhantomData<fn() -> St>);
3954    impl<St: State> sealed::Sealed for SetGroupName<St> {}
3955    impl<St: State> State for SetGroupName<St> {
3956        type ActorDid = St::ActorDid;
3957        type ConvoCreatedAt = St::ConvoCreatedAt;
3958        type ConvoId = St::ConvoId;
3959        type CreatedAt = St::CreatedAt;
3960        type GroupMemberCount = St::GroupMemberCount;
3961        type GroupName = Set<members::group_name>;
3962        type OwnerDid = St::OwnerDid;
3963        type Rev = St::Rev;
3964        type SubjectDid = St::SubjectDid;
3965    }
3966    ///State transition - sets the `owner_did` field to Set
3967    pub struct SetOwnerDid<St: State = Empty>(PhantomData<fn() -> St>);
3968    impl<St: State> sealed::Sealed for SetOwnerDid<St> {}
3969    impl<St: State> State for SetOwnerDid<St> {
3970        type ActorDid = St::ActorDid;
3971        type ConvoCreatedAt = St::ConvoCreatedAt;
3972        type ConvoId = St::ConvoId;
3973        type CreatedAt = St::CreatedAt;
3974        type GroupMemberCount = St::GroupMemberCount;
3975        type GroupName = St::GroupName;
3976        type OwnerDid = Set<members::owner_did>;
3977        type Rev = St::Rev;
3978        type SubjectDid = St::SubjectDid;
3979    }
3980    ///State transition - sets the `rev` field to Set
3981    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
3982    impl<St: State> sealed::Sealed for SetRev<St> {}
3983    impl<St: State> State for SetRev<St> {
3984        type ActorDid = St::ActorDid;
3985        type ConvoCreatedAt = St::ConvoCreatedAt;
3986        type ConvoId = St::ConvoId;
3987        type CreatedAt = St::CreatedAt;
3988        type GroupMemberCount = St::GroupMemberCount;
3989        type GroupName = St::GroupName;
3990        type OwnerDid = St::OwnerDid;
3991        type Rev = Set<members::rev>;
3992        type SubjectDid = St::SubjectDid;
3993    }
3994    ///State transition - sets the `subject_did` field to Set
3995    pub struct SetSubjectDid<St: State = Empty>(PhantomData<fn() -> St>);
3996    impl<St: State> sealed::Sealed for SetSubjectDid<St> {}
3997    impl<St: State> State for SetSubjectDid<St> {
3998        type ActorDid = St::ActorDid;
3999        type ConvoCreatedAt = St::ConvoCreatedAt;
4000        type ConvoId = St::ConvoId;
4001        type CreatedAt = St::CreatedAt;
4002        type GroupMemberCount = St::GroupMemberCount;
4003        type GroupName = St::GroupName;
4004        type OwnerDid = St::OwnerDid;
4005        type Rev = St::Rev;
4006        type SubjectDid = Set<members::subject_did>;
4007    }
4008    /// Marker types for field names
4009    #[allow(non_camel_case_types)]
4010    pub mod members {
4011        ///Marker type for the `actor_did` field
4012        pub struct actor_did(());
4013        ///Marker type for the `convo_created_at` field
4014        pub struct convo_created_at(());
4015        ///Marker type for the `convo_id` field
4016        pub struct convo_id(());
4017        ///Marker type for the `created_at` field
4018        pub struct created_at(());
4019        ///Marker type for the `group_member_count` field
4020        pub struct group_member_count(());
4021        ///Marker type for the `group_name` field
4022        pub struct group_name(());
4023        ///Marker type for the `owner_did` field
4024        pub struct owner_did(());
4025        ///Marker type for the `rev` field
4026        pub struct rev(());
4027        ///Marker type for the `subject_did` field
4028        pub struct subject_did(());
4029    }
4030}
4031
4032/// Builder for constructing an instance of this type.
4033pub struct EventGroupChatJoinRequestApprovedBuilder<
4034    St: event_group_chat_join_request_approved_state::State,
4035    S: BosStr = DefaultStr,
4036> {
4037    _state: PhantomData<fn() -> St>,
4038    _fields: (
4039        Option<Did<S>>,
4040        Option<Datetime>,
4041        Option<S>,
4042        Option<Datetime>,
4043        Option<i64>,
4044        Option<S>,
4045        Option<Did<S>>,
4046        Option<S>,
4047        Option<Did<S>>,
4048    ),
4049    _type: PhantomData<fn() -> S>,
4050}
4051
4052impl EventGroupChatJoinRequestApproved<DefaultStr> {
4053    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
4054    pub fn new() -> EventGroupChatJoinRequestApprovedBuilder<
4055        event_group_chat_join_request_approved_state::Empty,
4056        DefaultStr,
4057    > {
4058        EventGroupChatJoinRequestApprovedBuilder::new()
4059    }
4060}
4061
4062impl<S: BosStr> EventGroupChatJoinRequestApproved<S> {
4063    /// Create a new builder for this type
4064    pub fn builder() -> EventGroupChatJoinRequestApprovedBuilder<
4065        event_group_chat_join_request_approved_state::Empty,
4066        S,
4067    > {
4068        EventGroupChatJoinRequestApprovedBuilder::builder()
4069    }
4070}
4071
4072impl
4073    EventGroupChatJoinRequestApprovedBuilder<
4074        event_group_chat_join_request_approved_state::Empty,
4075        DefaultStr,
4076    >
4077{
4078    /// Create a new builder with all fields unset, using the default string type, if needed
4079    pub fn new() -> Self {
4080        EventGroupChatJoinRequestApprovedBuilder {
4081            _state: PhantomData,
4082            _fields: (None, None, None, None, None, None, None, None, None),
4083            _type: PhantomData,
4084        }
4085    }
4086}
4087
4088impl<S: BosStr>
4089    EventGroupChatJoinRequestApprovedBuilder<event_group_chat_join_request_approved_state::Empty, S>
4090{
4091    /// Create a new builder with all fields unset
4092    pub fn builder() -> Self {
4093        EventGroupChatJoinRequestApprovedBuilder {
4094            _state: PhantomData,
4095            _fields: (None, None, None, None, None, None, None, None, None),
4096            _type: PhantomData,
4097        }
4098    }
4099}
4100
4101impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4102where
4103    St: event_group_chat_join_request_approved_state::State,
4104    St::ActorDid: event_group_chat_join_request_approved_state::IsUnset,
4105{
4106    /// Set the `actorDid` field (required)
4107    pub fn actor_did(
4108        mut self,
4109        value: impl Into<Did<S>>,
4110    ) -> EventGroupChatJoinRequestApprovedBuilder<
4111        event_group_chat_join_request_approved_state::SetActorDid<St>,
4112        S,
4113    > {
4114        self._fields.0 = Option::Some(value.into());
4115        EventGroupChatJoinRequestApprovedBuilder {
4116            _state: PhantomData,
4117            _fields: self._fields,
4118            _type: PhantomData,
4119        }
4120    }
4121}
4122
4123impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4124where
4125    St: event_group_chat_join_request_approved_state::State,
4126    St::ConvoCreatedAt: event_group_chat_join_request_approved_state::IsUnset,
4127{
4128    /// Set the `convoCreatedAt` field (required)
4129    pub fn convo_created_at(
4130        mut self,
4131        value: impl Into<Datetime>,
4132    ) -> EventGroupChatJoinRequestApprovedBuilder<
4133        event_group_chat_join_request_approved_state::SetConvoCreatedAt<St>,
4134        S,
4135    > {
4136        self._fields.1 = Option::Some(value.into());
4137        EventGroupChatJoinRequestApprovedBuilder {
4138            _state: PhantomData,
4139            _fields: self._fields,
4140            _type: PhantomData,
4141        }
4142    }
4143}
4144
4145impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4146where
4147    St: event_group_chat_join_request_approved_state::State,
4148    St::ConvoId: event_group_chat_join_request_approved_state::IsUnset,
4149{
4150    /// Set the `convoId` field (required)
4151    pub fn convo_id(
4152        mut self,
4153        value: impl Into<S>,
4154    ) -> EventGroupChatJoinRequestApprovedBuilder<
4155        event_group_chat_join_request_approved_state::SetConvoId<St>,
4156        S,
4157    > {
4158        self._fields.2 = Option::Some(value.into());
4159        EventGroupChatJoinRequestApprovedBuilder {
4160            _state: PhantomData,
4161            _fields: self._fields,
4162            _type: PhantomData,
4163        }
4164    }
4165}
4166
4167impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4168where
4169    St: event_group_chat_join_request_approved_state::State,
4170    St::CreatedAt: event_group_chat_join_request_approved_state::IsUnset,
4171{
4172    /// Set the `createdAt` field (required)
4173    pub fn created_at(
4174        mut self,
4175        value: impl Into<Datetime>,
4176    ) -> EventGroupChatJoinRequestApprovedBuilder<
4177        event_group_chat_join_request_approved_state::SetCreatedAt<St>,
4178        S,
4179    > {
4180        self._fields.3 = Option::Some(value.into());
4181        EventGroupChatJoinRequestApprovedBuilder {
4182            _state: PhantomData,
4183            _fields: self._fields,
4184            _type: PhantomData,
4185        }
4186    }
4187}
4188
4189impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4190where
4191    St: event_group_chat_join_request_approved_state::State,
4192    St::GroupMemberCount: event_group_chat_join_request_approved_state::IsUnset,
4193{
4194    /// Set the `groupMemberCount` field (required)
4195    pub fn group_member_count(
4196        mut self,
4197        value: impl Into<i64>,
4198    ) -> EventGroupChatJoinRequestApprovedBuilder<
4199        event_group_chat_join_request_approved_state::SetGroupMemberCount<St>,
4200        S,
4201    > {
4202        self._fields.4 = Option::Some(value.into());
4203        EventGroupChatJoinRequestApprovedBuilder {
4204            _state: PhantomData,
4205            _fields: self._fields,
4206            _type: PhantomData,
4207        }
4208    }
4209}
4210
4211impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4212where
4213    St: event_group_chat_join_request_approved_state::State,
4214    St::GroupName: event_group_chat_join_request_approved_state::IsUnset,
4215{
4216    /// Set the `groupName` field (required)
4217    pub fn group_name(
4218        mut self,
4219        value: impl Into<S>,
4220    ) -> EventGroupChatJoinRequestApprovedBuilder<
4221        event_group_chat_join_request_approved_state::SetGroupName<St>,
4222        S,
4223    > {
4224        self._fields.5 = Option::Some(value.into());
4225        EventGroupChatJoinRequestApprovedBuilder {
4226            _state: PhantomData,
4227            _fields: self._fields,
4228            _type: PhantomData,
4229        }
4230    }
4231}
4232
4233impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4234where
4235    St: event_group_chat_join_request_approved_state::State,
4236    St::OwnerDid: event_group_chat_join_request_approved_state::IsUnset,
4237{
4238    /// Set the `ownerDid` field (required)
4239    pub fn owner_did(
4240        mut self,
4241        value: impl Into<Did<S>>,
4242    ) -> EventGroupChatJoinRequestApprovedBuilder<
4243        event_group_chat_join_request_approved_state::SetOwnerDid<St>,
4244        S,
4245    > {
4246        self._fields.6 = Option::Some(value.into());
4247        EventGroupChatJoinRequestApprovedBuilder {
4248            _state: PhantomData,
4249            _fields: self._fields,
4250            _type: PhantomData,
4251        }
4252    }
4253}
4254
4255impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4256where
4257    St: event_group_chat_join_request_approved_state::State,
4258    St::Rev: event_group_chat_join_request_approved_state::IsUnset,
4259{
4260    /// Set the `rev` field (required)
4261    pub fn rev(
4262        mut self,
4263        value: impl Into<S>,
4264    ) -> EventGroupChatJoinRequestApprovedBuilder<
4265        event_group_chat_join_request_approved_state::SetRev<St>,
4266        S,
4267    > {
4268        self._fields.7 = Option::Some(value.into());
4269        EventGroupChatJoinRequestApprovedBuilder {
4270            _state: PhantomData,
4271            _fields: self._fields,
4272            _type: PhantomData,
4273        }
4274    }
4275}
4276
4277impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4278where
4279    St: event_group_chat_join_request_approved_state::State,
4280    St::SubjectDid: event_group_chat_join_request_approved_state::IsUnset,
4281{
4282    /// Set the `subjectDid` field (required)
4283    pub fn subject_did(
4284        mut self,
4285        value: impl Into<Did<S>>,
4286    ) -> EventGroupChatJoinRequestApprovedBuilder<
4287        event_group_chat_join_request_approved_state::SetSubjectDid<St>,
4288        S,
4289    > {
4290        self._fields.8 = Option::Some(value.into());
4291        EventGroupChatJoinRequestApprovedBuilder {
4292            _state: PhantomData,
4293            _fields: self._fields,
4294            _type: PhantomData,
4295        }
4296    }
4297}
4298
4299impl<St, S: BosStr> EventGroupChatJoinRequestApprovedBuilder<St, S>
4300where
4301    St: event_group_chat_join_request_approved_state::State,
4302    St::ActorDid: event_group_chat_join_request_approved_state::IsSet,
4303    St::ConvoCreatedAt: event_group_chat_join_request_approved_state::IsSet,
4304    St::ConvoId: event_group_chat_join_request_approved_state::IsSet,
4305    St::CreatedAt: event_group_chat_join_request_approved_state::IsSet,
4306    St::GroupMemberCount: event_group_chat_join_request_approved_state::IsSet,
4307    St::GroupName: event_group_chat_join_request_approved_state::IsSet,
4308    St::OwnerDid: event_group_chat_join_request_approved_state::IsSet,
4309    St::Rev: event_group_chat_join_request_approved_state::IsSet,
4310    St::SubjectDid: event_group_chat_join_request_approved_state::IsSet,
4311{
4312    /// Build the final struct.
4313    pub fn build(self) -> EventGroupChatJoinRequestApproved<S> {
4314        EventGroupChatJoinRequestApproved {
4315            actor_did: self._fields.0.unwrap(),
4316            convo_created_at: self._fields.1.unwrap(),
4317            convo_id: self._fields.2.unwrap(),
4318            created_at: self._fields.3.unwrap(),
4319            group_member_count: self._fields.4.unwrap(),
4320            group_name: self._fields.5.unwrap(),
4321            owner_did: self._fields.6.unwrap(),
4322            rev: self._fields.7.unwrap(),
4323            subject_did: self._fields.8.unwrap(),
4324            extra_data: Default::default(),
4325        }
4326    }
4327    /// Build the final struct with custom extra_data.
4328    pub fn build_with_data(
4329        self,
4330        extra_data: BTreeMap<SmolStr, Data<S>>,
4331    ) -> EventGroupChatJoinRequestApproved<S> {
4332        EventGroupChatJoinRequestApproved {
4333            actor_did: self._fields.0.unwrap(),
4334            convo_created_at: self._fields.1.unwrap(),
4335            convo_id: self._fields.2.unwrap(),
4336            created_at: self._fields.3.unwrap(),
4337            group_member_count: self._fields.4.unwrap(),
4338            group_name: self._fields.5.unwrap(),
4339            owner_did: self._fields.6.unwrap(),
4340            rev: self._fields.7.unwrap(),
4341            subject_did: self._fields.8.unwrap(),
4342            extra_data: Some(extra_data),
4343        }
4344    }
4345}
4346
4347pub mod event_group_chat_join_request_rejected_state {
4348
4349    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
4350    #[allow(unused)]
4351    use ::core::marker::PhantomData;
4352    mod sealed {
4353        pub trait Sealed {}
4354    }
4355    /// State trait tracking which required fields have been set
4356    pub trait State: sealed::Sealed {
4357        type ActorDid;
4358        type ConvoCreatedAt;
4359        type ConvoId;
4360        type CreatedAt;
4361        type GroupMemberCount;
4362        type GroupName;
4363        type OwnerDid;
4364        type Rev;
4365        type SubjectDid;
4366    }
4367    /// Empty state - all required fields are unset
4368    pub struct Empty(());
4369    impl sealed::Sealed for Empty {}
4370    impl State for Empty {
4371        type ActorDid = Unset;
4372        type ConvoCreatedAt = Unset;
4373        type ConvoId = Unset;
4374        type CreatedAt = Unset;
4375        type GroupMemberCount = Unset;
4376        type GroupName = Unset;
4377        type OwnerDid = Unset;
4378        type Rev = Unset;
4379        type SubjectDid = Unset;
4380    }
4381    ///State transition - sets the `actor_did` field to Set
4382    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
4383    impl<St: State> sealed::Sealed for SetActorDid<St> {}
4384    impl<St: State> State for SetActorDid<St> {
4385        type ActorDid = Set<members::actor_did>;
4386        type ConvoCreatedAt = St::ConvoCreatedAt;
4387        type ConvoId = St::ConvoId;
4388        type CreatedAt = St::CreatedAt;
4389        type GroupMemberCount = St::GroupMemberCount;
4390        type GroupName = St::GroupName;
4391        type OwnerDid = St::OwnerDid;
4392        type Rev = St::Rev;
4393        type SubjectDid = St::SubjectDid;
4394    }
4395    ///State transition - sets the `convo_created_at` field to Set
4396    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
4397    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
4398    impl<St: State> State for SetConvoCreatedAt<St> {
4399        type ActorDid = St::ActorDid;
4400        type ConvoCreatedAt = Set<members::convo_created_at>;
4401        type ConvoId = St::ConvoId;
4402        type CreatedAt = St::CreatedAt;
4403        type GroupMemberCount = St::GroupMemberCount;
4404        type GroupName = St::GroupName;
4405        type OwnerDid = St::OwnerDid;
4406        type Rev = St::Rev;
4407        type SubjectDid = St::SubjectDid;
4408    }
4409    ///State transition - sets the `convo_id` field to Set
4410    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
4411    impl<St: State> sealed::Sealed for SetConvoId<St> {}
4412    impl<St: State> State for SetConvoId<St> {
4413        type ActorDid = St::ActorDid;
4414        type ConvoCreatedAt = St::ConvoCreatedAt;
4415        type ConvoId = Set<members::convo_id>;
4416        type CreatedAt = St::CreatedAt;
4417        type GroupMemberCount = St::GroupMemberCount;
4418        type GroupName = St::GroupName;
4419        type OwnerDid = St::OwnerDid;
4420        type Rev = St::Rev;
4421        type SubjectDid = St::SubjectDid;
4422    }
4423    ///State transition - sets the `created_at` field to Set
4424    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
4425    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
4426    impl<St: State> State for SetCreatedAt<St> {
4427        type ActorDid = St::ActorDid;
4428        type ConvoCreatedAt = St::ConvoCreatedAt;
4429        type ConvoId = St::ConvoId;
4430        type CreatedAt = Set<members::created_at>;
4431        type GroupMemberCount = St::GroupMemberCount;
4432        type GroupName = St::GroupName;
4433        type OwnerDid = St::OwnerDid;
4434        type Rev = St::Rev;
4435        type SubjectDid = St::SubjectDid;
4436    }
4437    ///State transition - sets the `group_member_count` field to Set
4438    pub struct SetGroupMemberCount<St: State = Empty>(PhantomData<fn() -> St>);
4439    impl<St: State> sealed::Sealed for SetGroupMemberCount<St> {}
4440    impl<St: State> State for SetGroupMemberCount<St> {
4441        type ActorDid = St::ActorDid;
4442        type ConvoCreatedAt = St::ConvoCreatedAt;
4443        type ConvoId = St::ConvoId;
4444        type CreatedAt = St::CreatedAt;
4445        type GroupMemberCount = Set<members::group_member_count>;
4446        type GroupName = St::GroupName;
4447        type OwnerDid = St::OwnerDid;
4448        type Rev = St::Rev;
4449        type SubjectDid = St::SubjectDid;
4450    }
4451    ///State transition - sets the `group_name` field to Set
4452    pub struct SetGroupName<St: State = Empty>(PhantomData<fn() -> St>);
4453    impl<St: State> sealed::Sealed for SetGroupName<St> {}
4454    impl<St: State> State for SetGroupName<St> {
4455        type ActorDid = St::ActorDid;
4456        type ConvoCreatedAt = St::ConvoCreatedAt;
4457        type ConvoId = St::ConvoId;
4458        type CreatedAt = St::CreatedAt;
4459        type GroupMemberCount = St::GroupMemberCount;
4460        type GroupName = Set<members::group_name>;
4461        type OwnerDid = St::OwnerDid;
4462        type Rev = St::Rev;
4463        type SubjectDid = St::SubjectDid;
4464    }
4465    ///State transition - sets the `owner_did` field to Set
4466    pub struct SetOwnerDid<St: State = Empty>(PhantomData<fn() -> St>);
4467    impl<St: State> sealed::Sealed for SetOwnerDid<St> {}
4468    impl<St: State> State for SetOwnerDid<St> {
4469        type ActorDid = St::ActorDid;
4470        type ConvoCreatedAt = St::ConvoCreatedAt;
4471        type ConvoId = St::ConvoId;
4472        type CreatedAt = St::CreatedAt;
4473        type GroupMemberCount = St::GroupMemberCount;
4474        type GroupName = St::GroupName;
4475        type OwnerDid = Set<members::owner_did>;
4476        type Rev = St::Rev;
4477        type SubjectDid = St::SubjectDid;
4478    }
4479    ///State transition - sets the `rev` field to Set
4480    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
4481    impl<St: State> sealed::Sealed for SetRev<St> {}
4482    impl<St: State> State for SetRev<St> {
4483        type ActorDid = St::ActorDid;
4484        type ConvoCreatedAt = St::ConvoCreatedAt;
4485        type ConvoId = St::ConvoId;
4486        type CreatedAt = St::CreatedAt;
4487        type GroupMemberCount = St::GroupMemberCount;
4488        type GroupName = St::GroupName;
4489        type OwnerDid = St::OwnerDid;
4490        type Rev = Set<members::rev>;
4491        type SubjectDid = St::SubjectDid;
4492    }
4493    ///State transition - sets the `subject_did` field to Set
4494    pub struct SetSubjectDid<St: State = Empty>(PhantomData<fn() -> St>);
4495    impl<St: State> sealed::Sealed for SetSubjectDid<St> {}
4496    impl<St: State> State for SetSubjectDid<St> {
4497        type ActorDid = St::ActorDid;
4498        type ConvoCreatedAt = St::ConvoCreatedAt;
4499        type ConvoId = St::ConvoId;
4500        type CreatedAt = St::CreatedAt;
4501        type GroupMemberCount = St::GroupMemberCount;
4502        type GroupName = St::GroupName;
4503        type OwnerDid = St::OwnerDid;
4504        type Rev = St::Rev;
4505        type SubjectDid = Set<members::subject_did>;
4506    }
4507    /// Marker types for field names
4508    #[allow(non_camel_case_types)]
4509    pub mod members {
4510        ///Marker type for the `actor_did` field
4511        pub struct actor_did(());
4512        ///Marker type for the `convo_created_at` field
4513        pub struct convo_created_at(());
4514        ///Marker type for the `convo_id` field
4515        pub struct convo_id(());
4516        ///Marker type for the `created_at` field
4517        pub struct created_at(());
4518        ///Marker type for the `group_member_count` field
4519        pub struct group_member_count(());
4520        ///Marker type for the `group_name` field
4521        pub struct group_name(());
4522        ///Marker type for the `owner_did` field
4523        pub struct owner_did(());
4524        ///Marker type for the `rev` field
4525        pub struct rev(());
4526        ///Marker type for the `subject_did` field
4527        pub struct subject_did(());
4528    }
4529}
4530
4531/// Builder for constructing an instance of this type.
4532pub struct EventGroupChatJoinRequestRejectedBuilder<
4533    St: event_group_chat_join_request_rejected_state::State,
4534    S: BosStr = DefaultStr,
4535> {
4536    _state: PhantomData<fn() -> St>,
4537    _fields: (
4538        Option<Did<S>>,
4539        Option<Datetime>,
4540        Option<S>,
4541        Option<Datetime>,
4542        Option<i64>,
4543        Option<S>,
4544        Option<Did<S>>,
4545        Option<S>,
4546        Option<Did<S>>,
4547    ),
4548    _type: PhantomData<fn() -> S>,
4549}
4550
4551impl EventGroupChatJoinRequestRejected<DefaultStr> {
4552    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
4553    pub fn new() -> EventGroupChatJoinRequestRejectedBuilder<
4554        event_group_chat_join_request_rejected_state::Empty,
4555        DefaultStr,
4556    > {
4557        EventGroupChatJoinRequestRejectedBuilder::new()
4558    }
4559}
4560
4561impl<S: BosStr> EventGroupChatJoinRequestRejected<S> {
4562    /// Create a new builder for this type
4563    pub fn builder() -> EventGroupChatJoinRequestRejectedBuilder<
4564        event_group_chat_join_request_rejected_state::Empty,
4565        S,
4566    > {
4567        EventGroupChatJoinRequestRejectedBuilder::builder()
4568    }
4569}
4570
4571impl
4572    EventGroupChatJoinRequestRejectedBuilder<
4573        event_group_chat_join_request_rejected_state::Empty,
4574        DefaultStr,
4575    >
4576{
4577    /// Create a new builder with all fields unset, using the default string type, if needed
4578    pub fn new() -> Self {
4579        EventGroupChatJoinRequestRejectedBuilder {
4580            _state: PhantomData,
4581            _fields: (None, None, None, None, None, None, None, None, None),
4582            _type: PhantomData,
4583        }
4584    }
4585}
4586
4587impl<S: BosStr>
4588    EventGroupChatJoinRequestRejectedBuilder<event_group_chat_join_request_rejected_state::Empty, S>
4589{
4590    /// Create a new builder with all fields unset
4591    pub fn builder() -> Self {
4592        EventGroupChatJoinRequestRejectedBuilder {
4593            _state: PhantomData,
4594            _fields: (None, None, None, None, None, None, None, None, None),
4595            _type: PhantomData,
4596        }
4597    }
4598}
4599
4600impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4601where
4602    St: event_group_chat_join_request_rejected_state::State,
4603    St::ActorDid: event_group_chat_join_request_rejected_state::IsUnset,
4604{
4605    /// Set the `actorDid` field (required)
4606    pub fn actor_did(
4607        mut self,
4608        value: impl Into<Did<S>>,
4609    ) -> EventGroupChatJoinRequestRejectedBuilder<
4610        event_group_chat_join_request_rejected_state::SetActorDid<St>,
4611        S,
4612    > {
4613        self._fields.0 = Option::Some(value.into());
4614        EventGroupChatJoinRequestRejectedBuilder {
4615            _state: PhantomData,
4616            _fields: self._fields,
4617            _type: PhantomData,
4618        }
4619    }
4620}
4621
4622impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4623where
4624    St: event_group_chat_join_request_rejected_state::State,
4625    St::ConvoCreatedAt: event_group_chat_join_request_rejected_state::IsUnset,
4626{
4627    /// Set the `convoCreatedAt` field (required)
4628    pub fn convo_created_at(
4629        mut self,
4630        value: impl Into<Datetime>,
4631    ) -> EventGroupChatJoinRequestRejectedBuilder<
4632        event_group_chat_join_request_rejected_state::SetConvoCreatedAt<St>,
4633        S,
4634    > {
4635        self._fields.1 = Option::Some(value.into());
4636        EventGroupChatJoinRequestRejectedBuilder {
4637            _state: PhantomData,
4638            _fields: self._fields,
4639            _type: PhantomData,
4640        }
4641    }
4642}
4643
4644impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4645where
4646    St: event_group_chat_join_request_rejected_state::State,
4647    St::ConvoId: event_group_chat_join_request_rejected_state::IsUnset,
4648{
4649    /// Set the `convoId` field (required)
4650    pub fn convo_id(
4651        mut self,
4652        value: impl Into<S>,
4653    ) -> EventGroupChatJoinRequestRejectedBuilder<
4654        event_group_chat_join_request_rejected_state::SetConvoId<St>,
4655        S,
4656    > {
4657        self._fields.2 = Option::Some(value.into());
4658        EventGroupChatJoinRequestRejectedBuilder {
4659            _state: PhantomData,
4660            _fields: self._fields,
4661            _type: PhantomData,
4662        }
4663    }
4664}
4665
4666impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4667where
4668    St: event_group_chat_join_request_rejected_state::State,
4669    St::CreatedAt: event_group_chat_join_request_rejected_state::IsUnset,
4670{
4671    /// Set the `createdAt` field (required)
4672    pub fn created_at(
4673        mut self,
4674        value: impl Into<Datetime>,
4675    ) -> EventGroupChatJoinRequestRejectedBuilder<
4676        event_group_chat_join_request_rejected_state::SetCreatedAt<St>,
4677        S,
4678    > {
4679        self._fields.3 = Option::Some(value.into());
4680        EventGroupChatJoinRequestRejectedBuilder {
4681            _state: PhantomData,
4682            _fields: self._fields,
4683            _type: PhantomData,
4684        }
4685    }
4686}
4687
4688impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4689where
4690    St: event_group_chat_join_request_rejected_state::State,
4691    St::GroupMemberCount: event_group_chat_join_request_rejected_state::IsUnset,
4692{
4693    /// Set the `groupMemberCount` field (required)
4694    pub fn group_member_count(
4695        mut self,
4696        value: impl Into<i64>,
4697    ) -> EventGroupChatJoinRequestRejectedBuilder<
4698        event_group_chat_join_request_rejected_state::SetGroupMemberCount<St>,
4699        S,
4700    > {
4701        self._fields.4 = Option::Some(value.into());
4702        EventGroupChatJoinRequestRejectedBuilder {
4703            _state: PhantomData,
4704            _fields: self._fields,
4705            _type: PhantomData,
4706        }
4707    }
4708}
4709
4710impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4711where
4712    St: event_group_chat_join_request_rejected_state::State,
4713    St::GroupName: event_group_chat_join_request_rejected_state::IsUnset,
4714{
4715    /// Set the `groupName` field (required)
4716    pub fn group_name(
4717        mut self,
4718        value: impl Into<S>,
4719    ) -> EventGroupChatJoinRequestRejectedBuilder<
4720        event_group_chat_join_request_rejected_state::SetGroupName<St>,
4721        S,
4722    > {
4723        self._fields.5 = Option::Some(value.into());
4724        EventGroupChatJoinRequestRejectedBuilder {
4725            _state: PhantomData,
4726            _fields: self._fields,
4727            _type: PhantomData,
4728        }
4729    }
4730}
4731
4732impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4733where
4734    St: event_group_chat_join_request_rejected_state::State,
4735    St::OwnerDid: event_group_chat_join_request_rejected_state::IsUnset,
4736{
4737    /// Set the `ownerDid` field (required)
4738    pub fn owner_did(
4739        mut self,
4740        value: impl Into<Did<S>>,
4741    ) -> EventGroupChatJoinRequestRejectedBuilder<
4742        event_group_chat_join_request_rejected_state::SetOwnerDid<St>,
4743        S,
4744    > {
4745        self._fields.6 = Option::Some(value.into());
4746        EventGroupChatJoinRequestRejectedBuilder {
4747            _state: PhantomData,
4748            _fields: self._fields,
4749            _type: PhantomData,
4750        }
4751    }
4752}
4753
4754impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4755where
4756    St: event_group_chat_join_request_rejected_state::State,
4757    St::Rev: event_group_chat_join_request_rejected_state::IsUnset,
4758{
4759    /// Set the `rev` field (required)
4760    pub fn rev(
4761        mut self,
4762        value: impl Into<S>,
4763    ) -> EventGroupChatJoinRequestRejectedBuilder<
4764        event_group_chat_join_request_rejected_state::SetRev<St>,
4765        S,
4766    > {
4767        self._fields.7 = Option::Some(value.into());
4768        EventGroupChatJoinRequestRejectedBuilder {
4769            _state: PhantomData,
4770            _fields: self._fields,
4771            _type: PhantomData,
4772        }
4773    }
4774}
4775
4776impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4777where
4778    St: event_group_chat_join_request_rejected_state::State,
4779    St::SubjectDid: event_group_chat_join_request_rejected_state::IsUnset,
4780{
4781    /// Set the `subjectDid` field (required)
4782    pub fn subject_did(
4783        mut self,
4784        value: impl Into<Did<S>>,
4785    ) -> EventGroupChatJoinRequestRejectedBuilder<
4786        event_group_chat_join_request_rejected_state::SetSubjectDid<St>,
4787        S,
4788    > {
4789        self._fields.8 = Option::Some(value.into());
4790        EventGroupChatJoinRequestRejectedBuilder {
4791            _state: PhantomData,
4792            _fields: self._fields,
4793            _type: PhantomData,
4794        }
4795    }
4796}
4797
4798impl<St, S: BosStr> EventGroupChatJoinRequestRejectedBuilder<St, S>
4799where
4800    St: event_group_chat_join_request_rejected_state::State,
4801    St::ActorDid: event_group_chat_join_request_rejected_state::IsSet,
4802    St::ConvoCreatedAt: event_group_chat_join_request_rejected_state::IsSet,
4803    St::ConvoId: event_group_chat_join_request_rejected_state::IsSet,
4804    St::CreatedAt: event_group_chat_join_request_rejected_state::IsSet,
4805    St::GroupMemberCount: event_group_chat_join_request_rejected_state::IsSet,
4806    St::GroupName: event_group_chat_join_request_rejected_state::IsSet,
4807    St::OwnerDid: event_group_chat_join_request_rejected_state::IsSet,
4808    St::Rev: event_group_chat_join_request_rejected_state::IsSet,
4809    St::SubjectDid: event_group_chat_join_request_rejected_state::IsSet,
4810{
4811    /// Build the final struct.
4812    pub fn build(self) -> EventGroupChatJoinRequestRejected<S> {
4813        EventGroupChatJoinRequestRejected {
4814            actor_did: self._fields.0.unwrap(),
4815            convo_created_at: self._fields.1.unwrap(),
4816            convo_id: self._fields.2.unwrap(),
4817            created_at: self._fields.3.unwrap(),
4818            group_member_count: self._fields.4.unwrap(),
4819            group_name: self._fields.5.unwrap(),
4820            owner_did: self._fields.6.unwrap(),
4821            rev: self._fields.7.unwrap(),
4822            subject_did: self._fields.8.unwrap(),
4823            extra_data: Default::default(),
4824        }
4825    }
4826    /// Build the final struct with custom extra_data.
4827    pub fn build_with_data(
4828        self,
4829        extra_data: BTreeMap<SmolStr, Data<S>>,
4830    ) -> EventGroupChatJoinRequestRejected<S> {
4831        EventGroupChatJoinRequestRejected {
4832            actor_did: self._fields.0.unwrap(),
4833            convo_created_at: self._fields.1.unwrap(),
4834            convo_id: self._fields.2.unwrap(),
4835            created_at: self._fields.3.unwrap(),
4836            group_member_count: self._fields.4.unwrap(),
4837            group_name: self._fields.5.unwrap(),
4838            owner_did: self._fields.6.unwrap(),
4839            rev: self._fields.7.unwrap(),
4840            subject_did: self._fields.8.unwrap(),
4841            extra_data: Some(extra_data),
4842        }
4843    }
4844}
4845
4846pub mod event_group_chat_member_added_state {
4847
4848    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
4849    #[allow(unused)]
4850    use ::core::marker::PhantomData;
4851    mod sealed {
4852        pub trait Sealed {}
4853    }
4854    /// State trait tracking which required fields have been set
4855    pub trait State: sealed::Sealed {
4856        type ActorDid;
4857        type ConvoCreatedAt;
4858        type ConvoId;
4859        type CreatedAt;
4860        type GroupMemberCount;
4861        type GroupName;
4862        type OwnerDid;
4863        type RequestMembersCount;
4864        type Rev;
4865        type SubjectDid;
4866        type SubjectFollowsOwner;
4867    }
4868    /// Empty state - all required fields are unset
4869    pub struct Empty(());
4870    impl sealed::Sealed for Empty {}
4871    impl State for Empty {
4872        type ActorDid = Unset;
4873        type ConvoCreatedAt = Unset;
4874        type ConvoId = Unset;
4875        type CreatedAt = Unset;
4876        type GroupMemberCount = Unset;
4877        type GroupName = Unset;
4878        type OwnerDid = Unset;
4879        type RequestMembersCount = Unset;
4880        type Rev = Unset;
4881        type SubjectDid = Unset;
4882        type SubjectFollowsOwner = Unset;
4883    }
4884    ///State transition - sets the `actor_did` field to Set
4885    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
4886    impl<St: State> sealed::Sealed for SetActorDid<St> {}
4887    impl<St: State> State for SetActorDid<St> {
4888        type ActorDid = Set<members::actor_did>;
4889        type ConvoCreatedAt = St::ConvoCreatedAt;
4890        type ConvoId = St::ConvoId;
4891        type CreatedAt = St::CreatedAt;
4892        type GroupMemberCount = St::GroupMemberCount;
4893        type GroupName = St::GroupName;
4894        type OwnerDid = St::OwnerDid;
4895        type RequestMembersCount = St::RequestMembersCount;
4896        type Rev = St::Rev;
4897        type SubjectDid = St::SubjectDid;
4898        type SubjectFollowsOwner = St::SubjectFollowsOwner;
4899    }
4900    ///State transition - sets the `convo_created_at` field to Set
4901    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
4902    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
4903    impl<St: State> State for SetConvoCreatedAt<St> {
4904        type ActorDid = St::ActorDid;
4905        type ConvoCreatedAt = Set<members::convo_created_at>;
4906        type ConvoId = St::ConvoId;
4907        type CreatedAt = St::CreatedAt;
4908        type GroupMemberCount = St::GroupMemberCount;
4909        type GroupName = St::GroupName;
4910        type OwnerDid = St::OwnerDid;
4911        type RequestMembersCount = St::RequestMembersCount;
4912        type Rev = St::Rev;
4913        type SubjectDid = St::SubjectDid;
4914        type SubjectFollowsOwner = St::SubjectFollowsOwner;
4915    }
4916    ///State transition - sets the `convo_id` field to Set
4917    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
4918    impl<St: State> sealed::Sealed for SetConvoId<St> {}
4919    impl<St: State> State for SetConvoId<St> {
4920        type ActorDid = St::ActorDid;
4921        type ConvoCreatedAt = St::ConvoCreatedAt;
4922        type ConvoId = Set<members::convo_id>;
4923        type CreatedAt = St::CreatedAt;
4924        type GroupMemberCount = St::GroupMemberCount;
4925        type GroupName = St::GroupName;
4926        type OwnerDid = St::OwnerDid;
4927        type RequestMembersCount = St::RequestMembersCount;
4928        type Rev = St::Rev;
4929        type SubjectDid = St::SubjectDid;
4930        type SubjectFollowsOwner = St::SubjectFollowsOwner;
4931    }
4932    ///State transition - sets the `created_at` field to Set
4933    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
4934    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
4935    impl<St: State> State for SetCreatedAt<St> {
4936        type ActorDid = St::ActorDid;
4937        type ConvoCreatedAt = St::ConvoCreatedAt;
4938        type ConvoId = St::ConvoId;
4939        type CreatedAt = Set<members::created_at>;
4940        type GroupMemberCount = St::GroupMemberCount;
4941        type GroupName = St::GroupName;
4942        type OwnerDid = St::OwnerDid;
4943        type RequestMembersCount = St::RequestMembersCount;
4944        type Rev = St::Rev;
4945        type SubjectDid = St::SubjectDid;
4946        type SubjectFollowsOwner = St::SubjectFollowsOwner;
4947    }
4948    ///State transition - sets the `group_member_count` field to Set
4949    pub struct SetGroupMemberCount<St: State = Empty>(PhantomData<fn() -> St>);
4950    impl<St: State> sealed::Sealed for SetGroupMemberCount<St> {}
4951    impl<St: State> State for SetGroupMemberCount<St> {
4952        type ActorDid = St::ActorDid;
4953        type ConvoCreatedAt = St::ConvoCreatedAt;
4954        type ConvoId = St::ConvoId;
4955        type CreatedAt = St::CreatedAt;
4956        type GroupMemberCount = Set<members::group_member_count>;
4957        type GroupName = St::GroupName;
4958        type OwnerDid = St::OwnerDid;
4959        type RequestMembersCount = St::RequestMembersCount;
4960        type Rev = St::Rev;
4961        type SubjectDid = St::SubjectDid;
4962        type SubjectFollowsOwner = St::SubjectFollowsOwner;
4963    }
4964    ///State transition - sets the `group_name` field to Set
4965    pub struct SetGroupName<St: State = Empty>(PhantomData<fn() -> St>);
4966    impl<St: State> sealed::Sealed for SetGroupName<St> {}
4967    impl<St: State> State for SetGroupName<St> {
4968        type ActorDid = St::ActorDid;
4969        type ConvoCreatedAt = St::ConvoCreatedAt;
4970        type ConvoId = St::ConvoId;
4971        type CreatedAt = St::CreatedAt;
4972        type GroupMemberCount = St::GroupMemberCount;
4973        type GroupName = Set<members::group_name>;
4974        type OwnerDid = St::OwnerDid;
4975        type RequestMembersCount = St::RequestMembersCount;
4976        type Rev = St::Rev;
4977        type SubjectDid = St::SubjectDid;
4978        type SubjectFollowsOwner = St::SubjectFollowsOwner;
4979    }
4980    ///State transition - sets the `owner_did` field to Set
4981    pub struct SetOwnerDid<St: State = Empty>(PhantomData<fn() -> St>);
4982    impl<St: State> sealed::Sealed for SetOwnerDid<St> {}
4983    impl<St: State> State for SetOwnerDid<St> {
4984        type ActorDid = St::ActorDid;
4985        type ConvoCreatedAt = St::ConvoCreatedAt;
4986        type ConvoId = St::ConvoId;
4987        type CreatedAt = St::CreatedAt;
4988        type GroupMemberCount = St::GroupMemberCount;
4989        type GroupName = St::GroupName;
4990        type OwnerDid = Set<members::owner_did>;
4991        type RequestMembersCount = St::RequestMembersCount;
4992        type Rev = St::Rev;
4993        type SubjectDid = St::SubjectDid;
4994        type SubjectFollowsOwner = St::SubjectFollowsOwner;
4995    }
4996    ///State transition - sets the `request_members_count` field to Set
4997    pub struct SetRequestMembersCount<St: State = Empty>(PhantomData<fn() -> St>);
4998    impl<St: State> sealed::Sealed for SetRequestMembersCount<St> {}
4999    impl<St: State> State for SetRequestMembersCount<St> {
5000        type ActorDid = St::ActorDid;
5001        type ConvoCreatedAt = St::ConvoCreatedAt;
5002        type ConvoId = St::ConvoId;
5003        type CreatedAt = St::CreatedAt;
5004        type GroupMemberCount = St::GroupMemberCount;
5005        type GroupName = St::GroupName;
5006        type OwnerDid = St::OwnerDid;
5007        type RequestMembersCount = Set<members::request_members_count>;
5008        type Rev = St::Rev;
5009        type SubjectDid = St::SubjectDid;
5010        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5011    }
5012    ///State transition - sets the `rev` field to Set
5013    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
5014    impl<St: State> sealed::Sealed for SetRev<St> {}
5015    impl<St: State> State for SetRev<St> {
5016        type ActorDid = St::ActorDid;
5017        type ConvoCreatedAt = St::ConvoCreatedAt;
5018        type ConvoId = St::ConvoId;
5019        type CreatedAt = St::CreatedAt;
5020        type GroupMemberCount = St::GroupMemberCount;
5021        type GroupName = St::GroupName;
5022        type OwnerDid = St::OwnerDid;
5023        type RequestMembersCount = St::RequestMembersCount;
5024        type Rev = Set<members::rev>;
5025        type SubjectDid = St::SubjectDid;
5026        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5027    }
5028    ///State transition - sets the `subject_did` field to Set
5029    pub struct SetSubjectDid<St: State = Empty>(PhantomData<fn() -> St>);
5030    impl<St: State> sealed::Sealed for SetSubjectDid<St> {}
5031    impl<St: State> State for SetSubjectDid<St> {
5032        type ActorDid = St::ActorDid;
5033        type ConvoCreatedAt = St::ConvoCreatedAt;
5034        type ConvoId = St::ConvoId;
5035        type CreatedAt = St::CreatedAt;
5036        type GroupMemberCount = St::GroupMemberCount;
5037        type GroupName = St::GroupName;
5038        type OwnerDid = St::OwnerDid;
5039        type RequestMembersCount = St::RequestMembersCount;
5040        type Rev = St::Rev;
5041        type SubjectDid = Set<members::subject_did>;
5042        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5043    }
5044    ///State transition - sets the `subject_follows_owner` field to Set
5045    pub struct SetSubjectFollowsOwner<St: State = Empty>(PhantomData<fn() -> St>);
5046    impl<St: State> sealed::Sealed for SetSubjectFollowsOwner<St> {}
5047    impl<St: State> State for SetSubjectFollowsOwner<St> {
5048        type ActorDid = St::ActorDid;
5049        type ConvoCreatedAt = St::ConvoCreatedAt;
5050        type ConvoId = St::ConvoId;
5051        type CreatedAt = St::CreatedAt;
5052        type GroupMemberCount = St::GroupMemberCount;
5053        type GroupName = St::GroupName;
5054        type OwnerDid = St::OwnerDid;
5055        type RequestMembersCount = St::RequestMembersCount;
5056        type Rev = St::Rev;
5057        type SubjectDid = St::SubjectDid;
5058        type SubjectFollowsOwner = Set<members::subject_follows_owner>;
5059    }
5060    /// Marker types for field names
5061    #[allow(non_camel_case_types)]
5062    pub mod members {
5063        ///Marker type for the `actor_did` field
5064        pub struct actor_did(());
5065        ///Marker type for the `convo_created_at` field
5066        pub struct convo_created_at(());
5067        ///Marker type for the `convo_id` field
5068        pub struct convo_id(());
5069        ///Marker type for the `created_at` field
5070        pub struct created_at(());
5071        ///Marker type for the `group_member_count` field
5072        pub struct group_member_count(());
5073        ///Marker type for the `group_name` field
5074        pub struct group_name(());
5075        ///Marker type for the `owner_did` field
5076        pub struct owner_did(());
5077        ///Marker type for the `request_members_count` field
5078        pub struct request_members_count(());
5079        ///Marker type for the `rev` field
5080        pub struct rev(());
5081        ///Marker type for the `subject_did` field
5082        pub struct subject_did(());
5083        ///Marker type for the `subject_follows_owner` field
5084        pub struct subject_follows_owner(());
5085    }
5086}
5087
5088/// Builder for constructing an instance of this type.
5089pub struct EventGroupChatMemberAddedBuilder<
5090    St: event_group_chat_member_added_state::State,
5091    S: BosStr = DefaultStr,
5092> {
5093    _state: PhantomData<fn() -> St>,
5094    _fields: (
5095        Option<Did<S>>,
5096        Option<Datetime>,
5097        Option<S>,
5098        Option<Datetime>,
5099        Option<i64>,
5100        Option<S>,
5101        Option<Did<S>>,
5102        Option<i64>,
5103        Option<S>,
5104        Option<Did<S>>,
5105        Option<bool>,
5106    ),
5107    _type: PhantomData<fn() -> S>,
5108}
5109
5110impl EventGroupChatMemberAdded<DefaultStr> {
5111    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
5112    pub fn new()
5113    -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::Empty, DefaultStr>
5114    {
5115        EventGroupChatMemberAddedBuilder::new()
5116    }
5117}
5118
5119impl<S: BosStr> EventGroupChatMemberAdded<S> {
5120    /// Create a new builder for this type
5121    pub fn builder()
5122    -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::Empty, S> {
5123        EventGroupChatMemberAddedBuilder::builder()
5124    }
5125}
5126
5127impl EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::Empty, DefaultStr> {
5128    /// Create a new builder with all fields unset, using the default string type, if needed
5129    pub fn new() -> Self {
5130        EventGroupChatMemberAddedBuilder {
5131            _state: PhantomData,
5132            _fields: (
5133                None, None, None, None, None, None, None, None, None, None, None,
5134            ),
5135            _type: PhantomData,
5136        }
5137    }
5138}
5139
5140impl<S: BosStr> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::Empty, S> {
5141    /// Create a new builder with all fields unset
5142    pub fn builder() -> Self {
5143        EventGroupChatMemberAddedBuilder {
5144            _state: PhantomData,
5145            _fields: (
5146                None, None, None, None, None, None, None, None, None, None, None,
5147            ),
5148            _type: PhantomData,
5149        }
5150    }
5151}
5152
5153impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5154where
5155    St: event_group_chat_member_added_state::State,
5156    St::ActorDid: event_group_chat_member_added_state::IsUnset,
5157{
5158    /// Set the `actorDid` field (required)
5159    pub fn actor_did(
5160        mut self,
5161        value: impl Into<Did<S>>,
5162    ) -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::SetActorDid<St>, S>
5163    {
5164        self._fields.0 = Option::Some(value.into());
5165        EventGroupChatMemberAddedBuilder {
5166            _state: PhantomData,
5167            _fields: self._fields,
5168            _type: PhantomData,
5169        }
5170    }
5171}
5172
5173impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5174where
5175    St: event_group_chat_member_added_state::State,
5176    St::ConvoCreatedAt: event_group_chat_member_added_state::IsUnset,
5177{
5178    /// Set the `convoCreatedAt` field (required)
5179    pub fn convo_created_at(
5180        mut self,
5181        value: impl Into<Datetime>,
5182    ) -> EventGroupChatMemberAddedBuilder<
5183        event_group_chat_member_added_state::SetConvoCreatedAt<St>,
5184        S,
5185    > {
5186        self._fields.1 = Option::Some(value.into());
5187        EventGroupChatMemberAddedBuilder {
5188            _state: PhantomData,
5189            _fields: self._fields,
5190            _type: PhantomData,
5191        }
5192    }
5193}
5194
5195impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5196where
5197    St: event_group_chat_member_added_state::State,
5198    St::ConvoId: event_group_chat_member_added_state::IsUnset,
5199{
5200    /// Set the `convoId` field (required)
5201    pub fn convo_id(
5202        mut self,
5203        value: impl Into<S>,
5204    ) -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::SetConvoId<St>, S>
5205    {
5206        self._fields.2 = Option::Some(value.into());
5207        EventGroupChatMemberAddedBuilder {
5208            _state: PhantomData,
5209            _fields: self._fields,
5210            _type: PhantomData,
5211        }
5212    }
5213}
5214
5215impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5216where
5217    St: event_group_chat_member_added_state::State,
5218    St::CreatedAt: event_group_chat_member_added_state::IsUnset,
5219{
5220    /// Set the `createdAt` field (required)
5221    pub fn created_at(
5222        mut self,
5223        value: impl Into<Datetime>,
5224    ) -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::SetCreatedAt<St>, S>
5225    {
5226        self._fields.3 = Option::Some(value.into());
5227        EventGroupChatMemberAddedBuilder {
5228            _state: PhantomData,
5229            _fields: self._fields,
5230            _type: PhantomData,
5231        }
5232    }
5233}
5234
5235impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5236where
5237    St: event_group_chat_member_added_state::State,
5238    St::GroupMemberCount: event_group_chat_member_added_state::IsUnset,
5239{
5240    /// Set the `groupMemberCount` field (required)
5241    pub fn group_member_count(
5242        mut self,
5243        value: impl Into<i64>,
5244    ) -> EventGroupChatMemberAddedBuilder<
5245        event_group_chat_member_added_state::SetGroupMemberCount<St>,
5246        S,
5247    > {
5248        self._fields.4 = Option::Some(value.into());
5249        EventGroupChatMemberAddedBuilder {
5250            _state: PhantomData,
5251            _fields: self._fields,
5252            _type: PhantomData,
5253        }
5254    }
5255}
5256
5257impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5258where
5259    St: event_group_chat_member_added_state::State,
5260    St::GroupName: event_group_chat_member_added_state::IsUnset,
5261{
5262    /// Set the `groupName` field (required)
5263    pub fn group_name(
5264        mut self,
5265        value: impl Into<S>,
5266    ) -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::SetGroupName<St>, S>
5267    {
5268        self._fields.5 = Option::Some(value.into());
5269        EventGroupChatMemberAddedBuilder {
5270            _state: PhantomData,
5271            _fields: self._fields,
5272            _type: PhantomData,
5273        }
5274    }
5275}
5276
5277impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5278where
5279    St: event_group_chat_member_added_state::State,
5280    St::OwnerDid: event_group_chat_member_added_state::IsUnset,
5281{
5282    /// Set the `ownerDid` field (required)
5283    pub fn owner_did(
5284        mut self,
5285        value: impl Into<Did<S>>,
5286    ) -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::SetOwnerDid<St>, S>
5287    {
5288        self._fields.6 = Option::Some(value.into());
5289        EventGroupChatMemberAddedBuilder {
5290            _state: PhantomData,
5291            _fields: self._fields,
5292            _type: PhantomData,
5293        }
5294    }
5295}
5296
5297impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5298where
5299    St: event_group_chat_member_added_state::State,
5300    St::RequestMembersCount: event_group_chat_member_added_state::IsUnset,
5301{
5302    /// Set the `requestMembersCount` field (required)
5303    pub fn request_members_count(
5304        mut self,
5305        value: impl Into<i64>,
5306    ) -> EventGroupChatMemberAddedBuilder<
5307        event_group_chat_member_added_state::SetRequestMembersCount<St>,
5308        S,
5309    > {
5310        self._fields.7 = Option::Some(value.into());
5311        EventGroupChatMemberAddedBuilder {
5312            _state: PhantomData,
5313            _fields: self._fields,
5314            _type: PhantomData,
5315        }
5316    }
5317}
5318
5319impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5320where
5321    St: event_group_chat_member_added_state::State,
5322    St::Rev: event_group_chat_member_added_state::IsUnset,
5323{
5324    /// Set the `rev` field (required)
5325    pub fn rev(
5326        mut self,
5327        value: impl Into<S>,
5328    ) -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::SetRev<St>, S> {
5329        self._fields.8 = Option::Some(value.into());
5330        EventGroupChatMemberAddedBuilder {
5331            _state: PhantomData,
5332            _fields: self._fields,
5333            _type: PhantomData,
5334        }
5335    }
5336}
5337
5338impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5339where
5340    St: event_group_chat_member_added_state::State,
5341    St::SubjectDid: event_group_chat_member_added_state::IsUnset,
5342{
5343    /// Set the `subjectDid` field (required)
5344    pub fn subject_did(
5345        mut self,
5346        value: impl Into<Did<S>>,
5347    ) -> EventGroupChatMemberAddedBuilder<event_group_chat_member_added_state::SetSubjectDid<St>, S>
5348    {
5349        self._fields.9 = Option::Some(value.into());
5350        EventGroupChatMemberAddedBuilder {
5351            _state: PhantomData,
5352            _fields: self._fields,
5353            _type: PhantomData,
5354        }
5355    }
5356}
5357
5358impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5359where
5360    St: event_group_chat_member_added_state::State,
5361    St::SubjectFollowsOwner: event_group_chat_member_added_state::IsUnset,
5362{
5363    /// Set the `subjectFollowsOwner` field (required)
5364    pub fn subject_follows_owner(
5365        mut self,
5366        value: impl Into<bool>,
5367    ) -> EventGroupChatMemberAddedBuilder<
5368        event_group_chat_member_added_state::SetSubjectFollowsOwner<St>,
5369        S,
5370    > {
5371        self._fields.10 = Option::Some(value.into());
5372        EventGroupChatMemberAddedBuilder {
5373            _state: PhantomData,
5374            _fields: self._fields,
5375            _type: PhantomData,
5376        }
5377    }
5378}
5379
5380impl<St, S: BosStr> EventGroupChatMemberAddedBuilder<St, S>
5381where
5382    St: event_group_chat_member_added_state::State,
5383    St::ActorDid: event_group_chat_member_added_state::IsSet,
5384    St::ConvoCreatedAt: event_group_chat_member_added_state::IsSet,
5385    St::ConvoId: event_group_chat_member_added_state::IsSet,
5386    St::CreatedAt: event_group_chat_member_added_state::IsSet,
5387    St::GroupMemberCount: event_group_chat_member_added_state::IsSet,
5388    St::GroupName: event_group_chat_member_added_state::IsSet,
5389    St::OwnerDid: event_group_chat_member_added_state::IsSet,
5390    St::RequestMembersCount: event_group_chat_member_added_state::IsSet,
5391    St::Rev: event_group_chat_member_added_state::IsSet,
5392    St::SubjectDid: event_group_chat_member_added_state::IsSet,
5393    St::SubjectFollowsOwner: event_group_chat_member_added_state::IsSet,
5394{
5395    /// Build the final struct.
5396    pub fn build(self) -> EventGroupChatMemberAdded<S> {
5397        EventGroupChatMemberAdded {
5398            actor_did: self._fields.0.unwrap(),
5399            convo_created_at: self._fields.1.unwrap(),
5400            convo_id: self._fields.2.unwrap(),
5401            created_at: self._fields.3.unwrap(),
5402            group_member_count: self._fields.4.unwrap(),
5403            group_name: self._fields.5.unwrap(),
5404            owner_did: self._fields.6.unwrap(),
5405            request_members_count: self._fields.7.unwrap(),
5406            rev: self._fields.8.unwrap(),
5407            subject_did: self._fields.9.unwrap(),
5408            subject_follows_owner: self._fields.10.unwrap(),
5409            extra_data: Default::default(),
5410        }
5411    }
5412    /// Build the final struct with custom extra_data.
5413    pub fn build_with_data(
5414        self,
5415        extra_data: BTreeMap<SmolStr, Data<S>>,
5416    ) -> EventGroupChatMemberAdded<S> {
5417        EventGroupChatMemberAdded {
5418            actor_did: self._fields.0.unwrap(),
5419            convo_created_at: self._fields.1.unwrap(),
5420            convo_id: self._fields.2.unwrap(),
5421            created_at: self._fields.3.unwrap(),
5422            group_member_count: self._fields.4.unwrap(),
5423            group_name: self._fields.5.unwrap(),
5424            owner_did: self._fields.6.unwrap(),
5425            request_members_count: self._fields.7.unwrap(),
5426            rev: self._fields.8.unwrap(),
5427            subject_did: self._fields.9.unwrap(),
5428            subject_follows_owner: self._fields.10.unwrap(),
5429            extra_data: Some(extra_data),
5430        }
5431    }
5432}
5433
5434pub mod event_group_chat_member_joined_state {
5435
5436    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
5437    #[allow(unused)]
5438    use ::core::marker::PhantomData;
5439    mod sealed {
5440        pub trait Sealed {}
5441    }
5442    /// State trait tracking which required fields have been set
5443    pub trait State: sealed::Sealed {
5444        type ActorDid;
5445        type ConvoCreatedAt;
5446        type ConvoId;
5447        type CreatedAt;
5448        type GroupMemberCount;
5449        type GroupName;
5450        type JoinLinkCode;
5451        type OwnerDid;
5452        type Rev;
5453        type SubjectFollowsOwner;
5454    }
5455    /// Empty state - all required fields are unset
5456    pub struct Empty(());
5457    impl sealed::Sealed for Empty {}
5458    impl State for Empty {
5459        type ActorDid = Unset;
5460        type ConvoCreatedAt = Unset;
5461        type ConvoId = Unset;
5462        type CreatedAt = Unset;
5463        type GroupMemberCount = Unset;
5464        type GroupName = Unset;
5465        type JoinLinkCode = Unset;
5466        type OwnerDid = Unset;
5467        type Rev = Unset;
5468        type SubjectFollowsOwner = Unset;
5469    }
5470    ///State transition - sets the `actor_did` field to Set
5471    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
5472    impl<St: State> sealed::Sealed for SetActorDid<St> {}
5473    impl<St: State> State for SetActorDid<St> {
5474        type ActorDid = Set<members::actor_did>;
5475        type ConvoCreatedAt = St::ConvoCreatedAt;
5476        type ConvoId = St::ConvoId;
5477        type CreatedAt = St::CreatedAt;
5478        type GroupMemberCount = St::GroupMemberCount;
5479        type GroupName = St::GroupName;
5480        type JoinLinkCode = St::JoinLinkCode;
5481        type OwnerDid = St::OwnerDid;
5482        type Rev = St::Rev;
5483        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5484    }
5485    ///State transition - sets the `convo_created_at` field to Set
5486    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
5487    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
5488    impl<St: State> State for SetConvoCreatedAt<St> {
5489        type ActorDid = St::ActorDid;
5490        type ConvoCreatedAt = Set<members::convo_created_at>;
5491        type ConvoId = St::ConvoId;
5492        type CreatedAt = St::CreatedAt;
5493        type GroupMemberCount = St::GroupMemberCount;
5494        type GroupName = St::GroupName;
5495        type JoinLinkCode = St::JoinLinkCode;
5496        type OwnerDid = St::OwnerDid;
5497        type Rev = St::Rev;
5498        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5499    }
5500    ///State transition - sets the `convo_id` field to Set
5501    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
5502    impl<St: State> sealed::Sealed for SetConvoId<St> {}
5503    impl<St: State> State for SetConvoId<St> {
5504        type ActorDid = St::ActorDid;
5505        type ConvoCreatedAt = St::ConvoCreatedAt;
5506        type ConvoId = Set<members::convo_id>;
5507        type CreatedAt = St::CreatedAt;
5508        type GroupMemberCount = St::GroupMemberCount;
5509        type GroupName = St::GroupName;
5510        type JoinLinkCode = St::JoinLinkCode;
5511        type OwnerDid = St::OwnerDid;
5512        type Rev = St::Rev;
5513        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5514    }
5515    ///State transition - sets the `created_at` field to Set
5516    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
5517    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
5518    impl<St: State> State for SetCreatedAt<St> {
5519        type ActorDid = St::ActorDid;
5520        type ConvoCreatedAt = St::ConvoCreatedAt;
5521        type ConvoId = St::ConvoId;
5522        type CreatedAt = Set<members::created_at>;
5523        type GroupMemberCount = St::GroupMemberCount;
5524        type GroupName = St::GroupName;
5525        type JoinLinkCode = St::JoinLinkCode;
5526        type OwnerDid = St::OwnerDid;
5527        type Rev = St::Rev;
5528        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5529    }
5530    ///State transition - sets the `group_member_count` field to Set
5531    pub struct SetGroupMemberCount<St: State = Empty>(PhantomData<fn() -> St>);
5532    impl<St: State> sealed::Sealed for SetGroupMemberCount<St> {}
5533    impl<St: State> State for SetGroupMemberCount<St> {
5534        type ActorDid = St::ActorDid;
5535        type ConvoCreatedAt = St::ConvoCreatedAt;
5536        type ConvoId = St::ConvoId;
5537        type CreatedAt = St::CreatedAt;
5538        type GroupMemberCount = Set<members::group_member_count>;
5539        type GroupName = St::GroupName;
5540        type JoinLinkCode = St::JoinLinkCode;
5541        type OwnerDid = St::OwnerDid;
5542        type Rev = St::Rev;
5543        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5544    }
5545    ///State transition - sets the `group_name` field to Set
5546    pub struct SetGroupName<St: State = Empty>(PhantomData<fn() -> St>);
5547    impl<St: State> sealed::Sealed for SetGroupName<St> {}
5548    impl<St: State> State for SetGroupName<St> {
5549        type ActorDid = St::ActorDid;
5550        type ConvoCreatedAt = St::ConvoCreatedAt;
5551        type ConvoId = St::ConvoId;
5552        type CreatedAt = St::CreatedAt;
5553        type GroupMemberCount = St::GroupMemberCount;
5554        type GroupName = Set<members::group_name>;
5555        type JoinLinkCode = St::JoinLinkCode;
5556        type OwnerDid = St::OwnerDid;
5557        type Rev = St::Rev;
5558        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5559    }
5560    ///State transition - sets the `join_link_code` field to Set
5561    pub struct SetJoinLinkCode<St: State = Empty>(PhantomData<fn() -> St>);
5562    impl<St: State> sealed::Sealed for SetJoinLinkCode<St> {}
5563    impl<St: State> State for SetJoinLinkCode<St> {
5564        type ActorDid = St::ActorDid;
5565        type ConvoCreatedAt = St::ConvoCreatedAt;
5566        type ConvoId = St::ConvoId;
5567        type CreatedAt = St::CreatedAt;
5568        type GroupMemberCount = St::GroupMemberCount;
5569        type GroupName = St::GroupName;
5570        type JoinLinkCode = Set<members::join_link_code>;
5571        type OwnerDid = St::OwnerDid;
5572        type Rev = St::Rev;
5573        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5574    }
5575    ///State transition - sets the `owner_did` field to Set
5576    pub struct SetOwnerDid<St: State = Empty>(PhantomData<fn() -> St>);
5577    impl<St: State> sealed::Sealed for SetOwnerDid<St> {}
5578    impl<St: State> State for SetOwnerDid<St> {
5579        type ActorDid = St::ActorDid;
5580        type ConvoCreatedAt = St::ConvoCreatedAt;
5581        type ConvoId = St::ConvoId;
5582        type CreatedAt = St::CreatedAt;
5583        type GroupMemberCount = St::GroupMemberCount;
5584        type GroupName = St::GroupName;
5585        type JoinLinkCode = St::JoinLinkCode;
5586        type OwnerDid = Set<members::owner_did>;
5587        type Rev = St::Rev;
5588        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5589    }
5590    ///State transition - sets the `rev` field to Set
5591    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
5592    impl<St: State> sealed::Sealed for SetRev<St> {}
5593    impl<St: State> State for SetRev<St> {
5594        type ActorDid = St::ActorDid;
5595        type ConvoCreatedAt = St::ConvoCreatedAt;
5596        type ConvoId = St::ConvoId;
5597        type CreatedAt = St::CreatedAt;
5598        type GroupMemberCount = St::GroupMemberCount;
5599        type GroupName = St::GroupName;
5600        type JoinLinkCode = St::JoinLinkCode;
5601        type OwnerDid = St::OwnerDid;
5602        type Rev = Set<members::rev>;
5603        type SubjectFollowsOwner = St::SubjectFollowsOwner;
5604    }
5605    ///State transition - sets the `subject_follows_owner` field to Set
5606    pub struct SetSubjectFollowsOwner<St: State = Empty>(PhantomData<fn() -> St>);
5607    impl<St: State> sealed::Sealed for SetSubjectFollowsOwner<St> {}
5608    impl<St: State> State for SetSubjectFollowsOwner<St> {
5609        type ActorDid = St::ActorDid;
5610        type ConvoCreatedAt = St::ConvoCreatedAt;
5611        type ConvoId = St::ConvoId;
5612        type CreatedAt = St::CreatedAt;
5613        type GroupMemberCount = St::GroupMemberCount;
5614        type GroupName = St::GroupName;
5615        type JoinLinkCode = St::JoinLinkCode;
5616        type OwnerDid = St::OwnerDid;
5617        type Rev = St::Rev;
5618        type SubjectFollowsOwner = Set<members::subject_follows_owner>;
5619    }
5620    /// Marker types for field names
5621    #[allow(non_camel_case_types)]
5622    pub mod members {
5623        ///Marker type for the `actor_did` field
5624        pub struct actor_did(());
5625        ///Marker type for the `convo_created_at` field
5626        pub struct convo_created_at(());
5627        ///Marker type for the `convo_id` field
5628        pub struct convo_id(());
5629        ///Marker type for the `created_at` field
5630        pub struct created_at(());
5631        ///Marker type for the `group_member_count` field
5632        pub struct group_member_count(());
5633        ///Marker type for the `group_name` field
5634        pub struct group_name(());
5635        ///Marker type for the `join_link_code` field
5636        pub struct join_link_code(());
5637        ///Marker type for the `owner_did` field
5638        pub struct owner_did(());
5639        ///Marker type for the `rev` field
5640        pub struct rev(());
5641        ///Marker type for the `subject_follows_owner` field
5642        pub struct subject_follows_owner(());
5643    }
5644}
5645
5646/// Builder for constructing an instance of this type.
5647pub struct EventGroupChatMemberJoinedBuilder<
5648    St: event_group_chat_member_joined_state::State,
5649    S: BosStr = DefaultStr,
5650> {
5651    _state: PhantomData<fn() -> St>,
5652    _fields: (
5653        Option<Did<S>>,
5654        Option<Datetime>,
5655        Option<S>,
5656        Option<Datetime>,
5657        Option<i64>,
5658        Option<S>,
5659        Option<S>,
5660        Option<Did<S>>,
5661        Option<S>,
5662        Option<bool>,
5663    ),
5664    _type: PhantomData<fn() -> S>,
5665}
5666
5667impl EventGroupChatMemberJoined<DefaultStr> {
5668    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
5669    pub fn new()
5670    -> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::Empty, DefaultStr>
5671    {
5672        EventGroupChatMemberJoinedBuilder::new()
5673    }
5674}
5675
5676impl<S: BosStr> EventGroupChatMemberJoined<S> {
5677    /// Create a new builder for this type
5678    pub fn builder()
5679    -> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::Empty, S> {
5680        EventGroupChatMemberJoinedBuilder::builder()
5681    }
5682}
5683
5684impl EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::Empty, DefaultStr> {
5685    /// Create a new builder with all fields unset, using the default string type, if needed
5686    pub fn new() -> Self {
5687        EventGroupChatMemberJoinedBuilder {
5688            _state: PhantomData,
5689            _fields: (None, None, None, None, None, None, None, None, None, None),
5690            _type: PhantomData,
5691        }
5692    }
5693}
5694
5695impl<S: BosStr> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::Empty, S> {
5696    /// Create a new builder with all fields unset
5697    pub fn builder() -> Self {
5698        EventGroupChatMemberJoinedBuilder {
5699            _state: PhantomData,
5700            _fields: (None, None, None, None, None, None, None, None, None, None),
5701            _type: PhantomData,
5702        }
5703    }
5704}
5705
5706impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5707where
5708    St: event_group_chat_member_joined_state::State,
5709    St::ActorDid: event_group_chat_member_joined_state::IsUnset,
5710{
5711    /// Set the `actorDid` field (required)
5712    pub fn actor_did(
5713        mut self,
5714        value: impl Into<Did<S>>,
5715    ) -> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::SetActorDid<St>, S>
5716    {
5717        self._fields.0 = Option::Some(value.into());
5718        EventGroupChatMemberJoinedBuilder {
5719            _state: PhantomData,
5720            _fields: self._fields,
5721            _type: PhantomData,
5722        }
5723    }
5724}
5725
5726impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5727where
5728    St: event_group_chat_member_joined_state::State,
5729    St::ConvoCreatedAt: event_group_chat_member_joined_state::IsUnset,
5730{
5731    /// Set the `convoCreatedAt` field (required)
5732    pub fn convo_created_at(
5733        mut self,
5734        value: impl Into<Datetime>,
5735    ) -> EventGroupChatMemberJoinedBuilder<
5736        event_group_chat_member_joined_state::SetConvoCreatedAt<St>,
5737        S,
5738    > {
5739        self._fields.1 = Option::Some(value.into());
5740        EventGroupChatMemberJoinedBuilder {
5741            _state: PhantomData,
5742            _fields: self._fields,
5743            _type: PhantomData,
5744        }
5745    }
5746}
5747
5748impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5749where
5750    St: event_group_chat_member_joined_state::State,
5751    St::ConvoId: event_group_chat_member_joined_state::IsUnset,
5752{
5753    /// Set the `convoId` field (required)
5754    pub fn convo_id(
5755        mut self,
5756        value: impl Into<S>,
5757    ) -> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::SetConvoId<St>, S>
5758    {
5759        self._fields.2 = Option::Some(value.into());
5760        EventGroupChatMemberJoinedBuilder {
5761            _state: PhantomData,
5762            _fields: self._fields,
5763            _type: PhantomData,
5764        }
5765    }
5766}
5767
5768impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5769where
5770    St: event_group_chat_member_joined_state::State,
5771    St::CreatedAt: event_group_chat_member_joined_state::IsUnset,
5772{
5773    /// Set the `createdAt` field (required)
5774    pub fn created_at(
5775        mut self,
5776        value: impl Into<Datetime>,
5777    ) -> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::SetCreatedAt<St>, S>
5778    {
5779        self._fields.3 = Option::Some(value.into());
5780        EventGroupChatMemberJoinedBuilder {
5781            _state: PhantomData,
5782            _fields: self._fields,
5783            _type: PhantomData,
5784        }
5785    }
5786}
5787
5788impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5789where
5790    St: event_group_chat_member_joined_state::State,
5791    St::GroupMemberCount: event_group_chat_member_joined_state::IsUnset,
5792{
5793    /// Set the `groupMemberCount` field (required)
5794    pub fn group_member_count(
5795        mut self,
5796        value: impl Into<i64>,
5797    ) -> EventGroupChatMemberJoinedBuilder<
5798        event_group_chat_member_joined_state::SetGroupMemberCount<St>,
5799        S,
5800    > {
5801        self._fields.4 = Option::Some(value.into());
5802        EventGroupChatMemberJoinedBuilder {
5803            _state: PhantomData,
5804            _fields: self._fields,
5805            _type: PhantomData,
5806        }
5807    }
5808}
5809
5810impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5811where
5812    St: event_group_chat_member_joined_state::State,
5813    St::GroupName: event_group_chat_member_joined_state::IsUnset,
5814{
5815    /// Set the `groupName` field (required)
5816    pub fn group_name(
5817        mut self,
5818        value: impl Into<S>,
5819    ) -> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::SetGroupName<St>, S>
5820    {
5821        self._fields.5 = Option::Some(value.into());
5822        EventGroupChatMemberJoinedBuilder {
5823            _state: PhantomData,
5824            _fields: self._fields,
5825            _type: PhantomData,
5826        }
5827    }
5828}
5829
5830impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5831where
5832    St: event_group_chat_member_joined_state::State,
5833    St::JoinLinkCode: event_group_chat_member_joined_state::IsUnset,
5834{
5835    /// Set the `joinLinkCode` field (required)
5836    pub fn join_link_code(
5837        mut self,
5838        value: impl Into<S>,
5839    ) -> EventGroupChatMemberJoinedBuilder<
5840        event_group_chat_member_joined_state::SetJoinLinkCode<St>,
5841        S,
5842    > {
5843        self._fields.6 = Option::Some(value.into());
5844        EventGroupChatMemberJoinedBuilder {
5845            _state: PhantomData,
5846            _fields: self._fields,
5847            _type: PhantomData,
5848        }
5849    }
5850}
5851
5852impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5853where
5854    St: event_group_chat_member_joined_state::State,
5855    St::OwnerDid: event_group_chat_member_joined_state::IsUnset,
5856{
5857    /// Set the `ownerDid` field (required)
5858    pub fn owner_did(
5859        mut self,
5860        value: impl Into<Did<S>>,
5861    ) -> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::SetOwnerDid<St>, S>
5862    {
5863        self._fields.7 = Option::Some(value.into());
5864        EventGroupChatMemberJoinedBuilder {
5865            _state: PhantomData,
5866            _fields: self._fields,
5867            _type: PhantomData,
5868        }
5869    }
5870}
5871
5872impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5873where
5874    St: event_group_chat_member_joined_state::State,
5875    St::Rev: event_group_chat_member_joined_state::IsUnset,
5876{
5877    /// Set the `rev` field (required)
5878    pub fn rev(
5879        mut self,
5880        value: impl Into<S>,
5881    ) -> EventGroupChatMemberJoinedBuilder<event_group_chat_member_joined_state::SetRev<St>, S>
5882    {
5883        self._fields.8 = Option::Some(value.into());
5884        EventGroupChatMemberJoinedBuilder {
5885            _state: PhantomData,
5886            _fields: self._fields,
5887            _type: PhantomData,
5888        }
5889    }
5890}
5891
5892impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5893where
5894    St: event_group_chat_member_joined_state::State,
5895    St::SubjectFollowsOwner: event_group_chat_member_joined_state::IsUnset,
5896{
5897    /// Set the `subjectFollowsOwner` field (required)
5898    pub fn subject_follows_owner(
5899        mut self,
5900        value: impl Into<bool>,
5901    ) -> EventGroupChatMemberJoinedBuilder<
5902        event_group_chat_member_joined_state::SetSubjectFollowsOwner<St>,
5903        S,
5904    > {
5905        self._fields.9 = Option::Some(value.into());
5906        EventGroupChatMemberJoinedBuilder {
5907            _state: PhantomData,
5908            _fields: self._fields,
5909            _type: PhantomData,
5910        }
5911    }
5912}
5913
5914impl<St, S: BosStr> EventGroupChatMemberJoinedBuilder<St, S>
5915where
5916    St: event_group_chat_member_joined_state::State,
5917    St::ActorDid: event_group_chat_member_joined_state::IsSet,
5918    St::ConvoCreatedAt: event_group_chat_member_joined_state::IsSet,
5919    St::ConvoId: event_group_chat_member_joined_state::IsSet,
5920    St::CreatedAt: event_group_chat_member_joined_state::IsSet,
5921    St::GroupMemberCount: event_group_chat_member_joined_state::IsSet,
5922    St::GroupName: event_group_chat_member_joined_state::IsSet,
5923    St::JoinLinkCode: event_group_chat_member_joined_state::IsSet,
5924    St::OwnerDid: event_group_chat_member_joined_state::IsSet,
5925    St::Rev: event_group_chat_member_joined_state::IsSet,
5926    St::SubjectFollowsOwner: event_group_chat_member_joined_state::IsSet,
5927{
5928    /// Build the final struct.
5929    pub fn build(self) -> EventGroupChatMemberJoined<S> {
5930        EventGroupChatMemberJoined {
5931            actor_did: self._fields.0.unwrap(),
5932            convo_created_at: self._fields.1.unwrap(),
5933            convo_id: self._fields.2.unwrap(),
5934            created_at: self._fields.3.unwrap(),
5935            group_member_count: self._fields.4.unwrap(),
5936            group_name: self._fields.5.unwrap(),
5937            join_link_code: self._fields.6.unwrap(),
5938            owner_did: self._fields.7.unwrap(),
5939            rev: self._fields.8.unwrap(),
5940            subject_follows_owner: self._fields.9.unwrap(),
5941            extra_data: Default::default(),
5942        }
5943    }
5944    /// Build the final struct with custom extra_data.
5945    pub fn build_with_data(
5946        self,
5947        extra_data: BTreeMap<SmolStr, Data<S>>,
5948    ) -> EventGroupChatMemberJoined<S> {
5949        EventGroupChatMemberJoined {
5950            actor_did: self._fields.0.unwrap(),
5951            convo_created_at: self._fields.1.unwrap(),
5952            convo_id: self._fields.2.unwrap(),
5953            created_at: self._fields.3.unwrap(),
5954            group_member_count: self._fields.4.unwrap(),
5955            group_name: self._fields.5.unwrap(),
5956            join_link_code: self._fields.6.unwrap(),
5957            owner_did: self._fields.7.unwrap(),
5958            rev: self._fields.8.unwrap(),
5959            subject_follows_owner: self._fields.9.unwrap(),
5960            extra_data: Some(extra_data),
5961        }
5962    }
5963}
5964
5965pub mod event_group_chat_member_left_state {
5966
5967    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
5968    #[allow(unused)]
5969    use ::core::marker::PhantomData;
5970    mod sealed {
5971        pub trait Sealed {}
5972    }
5973    /// State trait tracking which required fields have been set
5974    pub trait State: sealed::Sealed {
5975        type ActorDid;
5976        type ConvoCreatedAt;
5977        type ConvoId;
5978        type CreatedAt;
5979        type GroupMemberCount;
5980        type GroupName;
5981        type LeaveMethod;
5982        type OwnerDid;
5983        type Rev;
5984        type SubjectDid;
5985    }
5986    /// Empty state - all required fields are unset
5987    pub struct Empty(());
5988    impl sealed::Sealed for Empty {}
5989    impl State for Empty {
5990        type ActorDid = Unset;
5991        type ConvoCreatedAt = Unset;
5992        type ConvoId = Unset;
5993        type CreatedAt = Unset;
5994        type GroupMemberCount = Unset;
5995        type GroupName = Unset;
5996        type LeaveMethod = Unset;
5997        type OwnerDid = Unset;
5998        type Rev = Unset;
5999        type SubjectDid = Unset;
6000    }
6001    ///State transition - sets the `actor_did` field to Set
6002    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
6003    impl<St: State> sealed::Sealed for SetActorDid<St> {}
6004    impl<St: State> State for SetActorDid<St> {
6005        type ActorDid = Set<members::actor_did>;
6006        type ConvoCreatedAt = St::ConvoCreatedAt;
6007        type ConvoId = St::ConvoId;
6008        type CreatedAt = St::CreatedAt;
6009        type GroupMemberCount = St::GroupMemberCount;
6010        type GroupName = St::GroupName;
6011        type LeaveMethod = St::LeaveMethod;
6012        type OwnerDid = St::OwnerDid;
6013        type Rev = St::Rev;
6014        type SubjectDid = St::SubjectDid;
6015    }
6016    ///State transition - sets the `convo_created_at` field to Set
6017    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
6018    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
6019    impl<St: State> State for SetConvoCreatedAt<St> {
6020        type ActorDid = St::ActorDid;
6021        type ConvoCreatedAt = Set<members::convo_created_at>;
6022        type ConvoId = St::ConvoId;
6023        type CreatedAt = St::CreatedAt;
6024        type GroupMemberCount = St::GroupMemberCount;
6025        type GroupName = St::GroupName;
6026        type LeaveMethod = St::LeaveMethod;
6027        type OwnerDid = St::OwnerDid;
6028        type Rev = St::Rev;
6029        type SubjectDid = St::SubjectDid;
6030    }
6031    ///State transition - sets the `convo_id` field to Set
6032    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
6033    impl<St: State> sealed::Sealed for SetConvoId<St> {}
6034    impl<St: State> State for SetConvoId<St> {
6035        type ActorDid = St::ActorDid;
6036        type ConvoCreatedAt = St::ConvoCreatedAt;
6037        type ConvoId = Set<members::convo_id>;
6038        type CreatedAt = St::CreatedAt;
6039        type GroupMemberCount = St::GroupMemberCount;
6040        type GroupName = St::GroupName;
6041        type LeaveMethod = St::LeaveMethod;
6042        type OwnerDid = St::OwnerDid;
6043        type Rev = St::Rev;
6044        type SubjectDid = St::SubjectDid;
6045    }
6046    ///State transition - sets the `created_at` field to Set
6047    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
6048    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
6049    impl<St: State> State for SetCreatedAt<St> {
6050        type ActorDid = St::ActorDid;
6051        type ConvoCreatedAt = St::ConvoCreatedAt;
6052        type ConvoId = St::ConvoId;
6053        type CreatedAt = Set<members::created_at>;
6054        type GroupMemberCount = St::GroupMemberCount;
6055        type GroupName = St::GroupName;
6056        type LeaveMethod = St::LeaveMethod;
6057        type OwnerDid = St::OwnerDid;
6058        type Rev = St::Rev;
6059        type SubjectDid = St::SubjectDid;
6060    }
6061    ///State transition - sets the `group_member_count` field to Set
6062    pub struct SetGroupMemberCount<St: State = Empty>(PhantomData<fn() -> St>);
6063    impl<St: State> sealed::Sealed for SetGroupMemberCount<St> {}
6064    impl<St: State> State for SetGroupMemberCount<St> {
6065        type ActorDid = St::ActorDid;
6066        type ConvoCreatedAt = St::ConvoCreatedAt;
6067        type ConvoId = St::ConvoId;
6068        type CreatedAt = St::CreatedAt;
6069        type GroupMemberCount = Set<members::group_member_count>;
6070        type GroupName = St::GroupName;
6071        type LeaveMethod = St::LeaveMethod;
6072        type OwnerDid = St::OwnerDid;
6073        type Rev = St::Rev;
6074        type SubjectDid = St::SubjectDid;
6075    }
6076    ///State transition - sets the `group_name` field to Set
6077    pub struct SetGroupName<St: State = Empty>(PhantomData<fn() -> St>);
6078    impl<St: State> sealed::Sealed for SetGroupName<St> {}
6079    impl<St: State> State for SetGroupName<St> {
6080        type ActorDid = St::ActorDid;
6081        type ConvoCreatedAt = St::ConvoCreatedAt;
6082        type ConvoId = St::ConvoId;
6083        type CreatedAt = St::CreatedAt;
6084        type GroupMemberCount = St::GroupMemberCount;
6085        type GroupName = Set<members::group_name>;
6086        type LeaveMethod = St::LeaveMethod;
6087        type OwnerDid = St::OwnerDid;
6088        type Rev = St::Rev;
6089        type SubjectDid = St::SubjectDid;
6090    }
6091    ///State transition - sets the `leave_method` field to Set
6092    pub struct SetLeaveMethod<St: State = Empty>(PhantomData<fn() -> St>);
6093    impl<St: State> sealed::Sealed for SetLeaveMethod<St> {}
6094    impl<St: State> State for SetLeaveMethod<St> {
6095        type ActorDid = St::ActorDid;
6096        type ConvoCreatedAt = St::ConvoCreatedAt;
6097        type ConvoId = St::ConvoId;
6098        type CreatedAt = St::CreatedAt;
6099        type GroupMemberCount = St::GroupMemberCount;
6100        type GroupName = St::GroupName;
6101        type LeaveMethod = Set<members::leave_method>;
6102        type OwnerDid = St::OwnerDid;
6103        type Rev = St::Rev;
6104        type SubjectDid = St::SubjectDid;
6105    }
6106    ///State transition - sets the `owner_did` field to Set
6107    pub struct SetOwnerDid<St: State = Empty>(PhantomData<fn() -> St>);
6108    impl<St: State> sealed::Sealed for SetOwnerDid<St> {}
6109    impl<St: State> State for SetOwnerDid<St> {
6110        type ActorDid = St::ActorDid;
6111        type ConvoCreatedAt = St::ConvoCreatedAt;
6112        type ConvoId = St::ConvoId;
6113        type CreatedAt = St::CreatedAt;
6114        type GroupMemberCount = St::GroupMemberCount;
6115        type GroupName = St::GroupName;
6116        type LeaveMethod = St::LeaveMethod;
6117        type OwnerDid = Set<members::owner_did>;
6118        type Rev = St::Rev;
6119        type SubjectDid = St::SubjectDid;
6120    }
6121    ///State transition - sets the `rev` field to Set
6122    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
6123    impl<St: State> sealed::Sealed for SetRev<St> {}
6124    impl<St: State> State for SetRev<St> {
6125        type ActorDid = St::ActorDid;
6126        type ConvoCreatedAt = St::ConvoCreatedAt;
6127        type ConvoId = St::ConvoId;
6128        type CreatedAt = St::CreatedAt;
6129        type GroupMemberCount = St::GroupMemberCount;
6130        type GroupName = St::GroupName;
6131        type LeaveMethod = St::LeaveMethod;
6132        type OwnerDid = St::OwnerDid;
6133        type Rev = Set<members::rev>;
6134        type SubjectDid = St::SubjectDid;
6135    }
6136    ///State transition - sets the `subject_did` field to Set
6137    pub struct SetSubjectDid<St: State = Empty>(PhantomData<fn() -> St>);
6138    impl<St: State> sealed::Sealed for SetSubjectDid<St> {}
6139    impl<St: State> State for SetSubjectDid<St> {
6140        type ActorDid = St::ActorDid;
6141        type ConvoCreatedAt = St::ConvoCreatedAt;
6142        type ConvoId = St::ConvoId;
6143        type CreatedAt = St::CreatedAt;
6144        type GroupMemberCount = St::GroupMemberCount;
6145        type GroupName = St::GroupName;
6146        type LeaveMethod = St::LeaveMethod;
6147        type OwnerDid = St::OwnerDid;
6148        type Rev = St::Rev;
6149        type SubjectDid = Set<members::subject_did>;
6150    }
6151    /// Marker types for field names
6152    #[allow(non_camel_case_types)]
6153    pub mod members {
6154        ///Marker type for the `actor_did` field
6155        pub struct actor_did(());
6156        ///Marker type for the `convo_created_at` field
6157        pub struct convo_created_at(());
6158        ///Marker type for the `convo_id` field
6159        pub struct convo_id(());
6160        ///Marker type for the `created_at` field
6161        pub struct created_at(());
6162        ///Marker type for the `group_member_count` field
6163        pub struct group_member_count(());
6164        ///Marker type for the `group_name` field
6165        pub struct group_name(());
6166        ///Marker type for the `leave_method` field
6167        pub struct leave_method(());
6168        ///Marker type for the `owner_did` field
6169        pub struct owner_did(());
6170        ///Marker type for the `rev` field
6171        pub struct rev(());
6172        ///Marker type for the `subject_did` field
6173        pub struct subject_did(());
6174    }
6175}
6176
6177/// Builder for constructing an instance of this type.
6178pub struct EventGroupChatMemberLeftBuilder<
6179    St: event_group_chat_member_left_state::State,
6180    S: BosStr = DefaultStr,
6181> {
6182    _state: PhantomData<fn() -> St>,
6183    _fields: (
6184        Option<Did<S>>,
6185        Option<Datetime>,
6186        Option<S>,
6187        Option<Datetime>,
6188        Option<i64>,
6189        Option<S>,
6190        Option<EventGroupChatMemberLeftLeaveMethod<S>>,
6191        Option<Did<S>>,
6192        Option<S>,
6193        Option<Did<S>>,
6194    ),
6195    _type: PhantomData<fn() -> S>,
6196}
6197
6198impl EventGroupChatMemberLeft<DefaultStr> {
6199    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
6200    pub fn new()
6201    -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::Empty, DefaultStr> {
6202        EventGroupChatMemberLeftBuilder::new()
6203    }
6204}
6205
6206impl<S: BosStr> EventGroupChatMemberLeft<S> {
6207    /// Create a new builder for this type
6208    pub fn builder() -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::Empty, S>
6209    {
6210        EventGroupChatMemberLeftBuilder::builder()
6211    }
6212}
6213
6214impl EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::Empty, DefaultStr> {
6215    /// Create a new builder with all fields unset, using the default string type, if needed
6216    pub fn new() -> Self {
6217        EventGroupChatMemberLeftBuilder {
6218            _state: PhantomData,
6219            _fields: (None, None, None, None, None, None, None, None, None, None),
6220            _type: PhantomData,
6221        }
6222    }
6223}
6224
6225impl<S: BosStr> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::Empty, S> {
6226    /// Create a new builder with all fields unset
6227    pub fn builder() -> Self {
6228        EventGroupChatMemberLeftBuilder {
6229            _state: PhantomData,
6230            _fields: (None, None, None, None, None, None, None, None, None, None),
6231            _type: PhantomData,
6232        }
6233    }
6234}
6235
6236impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6237where
6238    St: event_group_chat_member_left_state::State,
6239    St::ActorDid: event_group_chat_member_left_state::IsUnset,
6240{
6241    /// Set the `actorDid` field (required)
6242    pub fn actor_did(
6243        mut self,
6244        value: impl Into<Did<S>>,
6245    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetActorDid<St>, S>
6246    {
6247        self._fields.0 = Option::Some(value.into());
6248        EventGroupChatMemberLeftBuilder {
6249            _state: PhantomData,
6250            _fields: self._fields,
6251            _type: PhantomData,
6252        }
6253    }
6254}
6255
6256impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6257where
6258    St: event_group_chat_member_left_state::State,
6259    St::ConvoCreatedAt: event_group_chat_member_left_state::IsUnset,
6260{
6261    /// Set the `convoCreatedAt` field (required)
6262    pub fn convo_created_at(
6263        mut self,
6264        value: impl Into<Datetime>,
6265    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetConvoCreatedAt<St>, S>
6266    {
6267        self._fields.1 = Option::Some(value.into());
6268        EventGroupChatMemberLeftBuilder {
6269            _state: PhantomData,
6270            _fields: self._fields,
6271            _type: PhantomData,
6272        }
6273    }
6274}
6275
6276impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6277where
6278    St: event_group_chat_member_left_state::State,
6279    St::ConvoId: event_group_chat_member_left_state::IsUnset,
6280{
6281    /// Set the `convoId` field (required)
6282    pub fn convo_id(
6283        mut self,
6284        value: impl Into<S>,
6285    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetConvoId<St>, S>
6286    {
6287        self._fields.2 = Option::Some(value.into());
6288        EventGroupChatMemberLeftBuilder {
6289            _state: PhantomData,
6290            _fields: self._fields,
6291            _type: PhantomData,
6292        }
6293    }
6294}
6295
6296impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6297where
6298    St: event_group_chat_member_left_state::State,
6299    St::CreatedAt: event_group_chat_member_left_state::IsUnset,
6300{
6301    /// Set the `createdAt` field (required)
6302    pub fn created_at(
6303        mut self,
6304        value: impl Into<Datetime>,
6305    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetCreatedAt<St>, S>
6306    {
6307        self._fields.3 = Option::Some(value.into());
6308        EventGroupChatMemberLeftBuilder {
6309            _state: PhantomData,
6310            _fields: self._fields,
6311            _type: PhantomData,
6312        }
6313    }
6314}
6315
6316impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6317where
6318    St: event_group_chat_member_left_state::State,
6319    St::GroupMemberCount: event_group_chat_member_left_state::IsUnset,
6320{
6321    /// Set the `groupMemberCount` field (required)
6322    pub fn group_member_count(
6323        mut self,
6324        value: impl Into<i64>,
6325    ) -> EventGroupChatMemberLeftBuilder<
6326        event_group_chat_member_left_state::SetGroupMemberCount<St>,
6327        S,
6328    > {
6329        self._fields.4 = Option::Some(value.into());
6330        EventGroupChatMemberLeftBuilder {
6331            _state: PhantomData,
6332            _fields: self._fields,
6333            _type: PhantomData,
6334        }
6335    }
6336}
6337
6338impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6339where
6340    St: event_group_chat_member_left_state::State,
6341    St::GroupName: event_group_chat_member_left_state::IsUnset,
6342{
6343    /// Set the `groupName` field (required)
6344    pub fn group_name(
6345        mut self,
6346        value: impl Into<S>,
6347    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetGroupName<St>, S>
6348    {
6349        self._fields.5 = Option::Some(value.into());
6350        EventGroupChatMemberLeftBuilder {
6351            _state: PhantomData,
6352            _fields: self._fields,
6353            _type: PhantomData,
6354        }
6355    }
6356}
6357
6358impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6359where
6360    St: event_group_chat_member_left_state::State,
6361    St::LeaveMethod: event_group_chat_member_left_state::IsUnset,
6362{
6363    /// Set the `leaveMethod` field (required)
6364    pub fn leave_method(
6365        mut self,
6366        value: impl Into<EventGroupChatMemberLeftLeaveMethod<S>>,
6367    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetLeaveMethod<St>, S>
6368    {
6369        self._fields.6 = Option::Some(value.into());
6370        EventGroupChatMemberLeftBuilder {
6371            _state: PhantomData,
6372            _fields: self._fields,
6373            _type: PhantomData,
6374        }
6375    }
6376}
6377
6378impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6379where
6380    St: event_group_chat_member_left_state::State,
6381    St::OwnerDid: event_group_chat_member_left_state::IsUnset,
6382{
6383    /// Set the `ownerDid` field (required)
6384    pub fn owner_did(
6385        mut self,
6386        value: impl Into<Did<S>>,
6387    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetOwnerDid<St>, S>
6388    {
6389        self._fields.7 = Option::Some(value.into());
6390        EventGroupChatMemberLeftBuilder {
6391            _state: PhantomData,
6392            _fields: self._fields,
6393            _type: PhantomData,
6394        }
6395    }
6396}
6397
6398impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6399where
6400    St: event_group_chat_member_left_state::State,
6401    St::Rev: event_group_chat_member_left_state::IsUnset,
6402{
6403    /// Set the `rev` field (required)
6404    pub fn rev(
6405        mut self,
6406        value: impl Into<S>,
6407    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetRev<St>, S> {
6408        self._fields.8 = Option::Some(value.into());
6409        EventGroupChatMemberLeftBuilder {
6410            _state: PhantomData,
6411            _fields: self._fields,
6412            _type: PhantomData,
6413        }
6414    }
6415}
6416
6417impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6418where
6419    St: event_group_chat_member_left_state::State,
6420    St::SubjectDid: event_group_chat_member_left_state::IsUnset,
6421{
6422    /// Set the `subjectDid` field (required)
6423    pub fn subject_did(
6424        mut self,
6425        value: impl Into<Did<S>>,
6426    ) -> EventGroupChatMemberLeftBuilder<event_group_chat_member_left_state::SetSubjectDid<St>, S>
6427    {
6428        self._fields.9 = Option::Some(value.into());
6429        EventGroupChatMemberLeftBuilder {
6430            _state: PhantomData,
6431            _fields: self._fields,
6432            _type: PhantomData,
6433        }
6434    }
6435}
6436
6437impl<St, S: BosStr> EventGroupChatMemberLeftBuilder<St, S>
6438where
6439    St: event_group_chat_member_left_state::State,
6440    St::ActorDid: event_group_chat_member_left_state::IsSet,
6441    St::ConvoCreatedAt: event_group_chat_member_left_state::IsSet,
6442    St::ConvoId: event_group_chat_member_left_state::IsSet,
6443    St::CreatedAt: event_group_chat_member_left_state::IsSet,
6444    St::GroupMemberCount: event_group_chat_member_left_state::IsSet,
6445    St::GroupName: event_group_chat_member_left_state::IsSet,
6446    St::LeaveMethod: event_group_chat_member_left_state::IsSet,
6447    St::OwnerDid: event_group_chat_member_left_state::IsSet,
6448    St::Rev: event_group_chat_member_left_state::IsSet,
6449    St::SubjectDid: event_group_chat_member_left_state::IsSet,
6450{
6451    /// Build the final struct.
6452    pub fn build(self) -> EventGroupChatMemberLeft<S> {
6453        EventGroupChatMemberLeft {
6454            actor_did: self._fields.0.unwrap(),
6455            convo_created_at: self._fields.1.unwrap(),
6456            convo_id: self._fields.2.unwrap(),
6457            created_at: self._fields.3.unwrap(),
6458            group_member_count: self._fields.4.unwrap(),
6459            group_name: self._fields.5.unwrap(),
6460            leave_method: self._fields.6.unwrap(),
6461            owner_did: self._fields.7.unwrap(),
6462            rev: self._fields.8.unwrap(),
6463            subject_did: self._fields.9.unwrap(),
6464            extra_data: Default::default(),
6465        }
6466    }
6467    /// Build the final struct with custom extra_data.
6468    pub fn build_with_data(
6469        self,
6470        extra_data: BTreeMap<SmolStr, Data<S>>,
6471    ) -> EventGroupChatMemberLeft<S> {
6472        EventGroupChatMemberLeft {
6473            actor_did: self._fields.0.unwrap(),
6474            convo_created_at: self._fields.1.unwrap(),
6475            convo_id: self._fields.2.unwrap(),
6476            created_at: self._fields.3.unwrap(),
6477            group_member_count: self._fields.4.unwrap(),
6478            group_name: self._fields.5.unwrap(),
6479            leave_method: self._fields.6.unwrap(),
6480            owner_did: self._fields.7.unwrap(),
6481            rev: self._fields.8.unwrap(),
6482            subject_did: self._fields.9.unwrap(),
6483            extra_data: Some(extra_data),
6484        }
6485    }
6486}
6487
6488pub mod event_group_chat_updated_state {
6489
6490    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
6491    #[allow(unused)]
6492    use ::core::marker::PhantomData;
6493    mod sealed {
6494        pub trait Sealed {}
6495    }
6496    /// State trait tracking which required fields have been set
6497    pub trait State: sealed::Sealed {
6498        type ActorDid;
6499        type ConvoCreatedAt;
6500        type ConvoId;
6501        type CreatedAt;
6502        type GroupMemberCount;
6503        type GroupName;
6504        type OwnerDid;
6505        type Rev;
6506        type UpdateType;
6507    }
6508    /// Empty state - all required fields are unset
6509    pub struct Empty(());
6510    impl sealed::Sealed for Empty {}
6511    impl State for Empty {
6512        type ActorDid = Unset;
6513        type ConvoCreatedAt = Unset;
6514        type ConvoId = Unset;
6515        type CreatedAt = Unset;
6516        type GroupMemberCount = Unset;
6517        type GroupName = Unset;
6518        type OwnerDid = Unset;
6519        type Rev = Unset;
6520        type UpdateType = Unset;
6521    }
6522    ///State transition - sets the `actor_did` field to Set
6523    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
6524    impl<St: State> sealed::Sealed for SetActorDid<St> {}
6525    impl<St: State> State for SetActorDid<St> {
6526        type ActorDid = Set<members::actor_did>;
6527        type ConvoCreatedAt = St::ConvoCreatedAt;
6528        type ConvoId = St::ConvoId;
6529        type CreatedAt = St::CreatedAt;
6530        type GroupMemberCount = St::GroupMemberCount;
6531        type GroupName = St::GroupName;
6532        type OwnerDid = St::OwnerDid;
6533        type Rev = St::Rev;
6534        type UpdateType = St::UpdateType;
6535    }
6536    ///State transition - sets the `convo_created_at` field to Set
6537    pub struct SetConvoCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
6538    impl<St: State> sealed::Sealed for SetConvoCreatedAt<St> {}
6539    impl<St: State> State for SetConvoCreatedAt<St> {
6540        type ActorDid = St::ActorDid;
6541        type ConvoCreatedAt = Set<members::convo_created_at>;
6542        type ConvoId = St::ConvoId;
6543        type CreatedAt = St::CreatedAt;
6544        type GroupMemberCount = St::GroupMemberCount;
6545        type GroupName = St::GroupName;
6546        type OwnerDid = St::OwnerDid;
6547        type Rev = St::Rev;
6548        type UpdateType = St::UpdateType;
6549    }
6550    ///State transition - sets the `convo_id` field to Set
6551    pub struct SetConvoId<St: State = Empty>(PhantomData<fn() -> St>);
6552    impl<St: State> sealed::Sealed for SetConvoId<St> {}
6553    impl<St: State> State for SetConvoId<St> {
6554        type ActorDid = St::ActorDid;
6555        type ConvoCreatedAt = St::ConvoCreatedAt;
6556        type ConvoId = Set<members::convo_id>;
6557        type CreatedAt = St::CreatedAt;
6558        type GroupMemberCount = St::GroupMemberCount;
6559        type GroupName = St::GroupName;
6560        type OwnerDid = St::OwnerDid;
6561        type Rev = St::Rev;
6562        type UpdateType = St::UpdateType;
6563    }
6564    ///State transition - sets the `created_at` field to Set
6565    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
6566    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
6567    impl<St: State> State for SetCreatedAt<St> {
6568        type ActorDid = St::ActorDid;
6569        type ConvoCreatedAt = St::ConvoCreatedAt;
6570        type ConvoId = St::ConvoId;
6571        type CreatedAt = Set<members::created_at>;
6572        type GroupMemberCount = St::GroupMemberCount;
6573        type GroupName = St::GroupName;
6574        type OwnerDid = St::OwnerDid;
6575        type Rev = St::Rev;
6576        type UpdateType = St::UpdateType;
6577    }
6578    ///State transition - sets the `group_member_count` field to Set
6579    pub struct SetGroupMemberCount<St: State = Empty>(PhantomData<fn() -> St>);
6580    impl<St: State> sealed::Sealed for SetGroupMemberCount<St> {}
6581    impl<St: State> State for SetGroupMemberCount<St> {
6582        type ActorDid = St::ActorDid;
6583        type ConvoCreatedAt = St::ConvoCreatedAt;
6584        type ConvoId = St::ConvoId;
6585        type CreatedAt = St::CreatedAt;
6586        type GroupMemberCount = Set<members::group_member_count>;
6587        type GroupName = St::GroupName;
6588        type OwnerDid = St::OwnerDid;
6589        type Rev = St::Rev;
6590        type UpdateType = St::UpdateType;
6591    }
6592    ///State transition - sets the `group_name` field to Set
6593    pub struct SetGroupName<St: State = Empty>(PhantomData<fn() -> St>);
6594    impl<St: State> sealed::Sealed for SetGroupName<St> {}
6595    impl<St: State> State for SetGroupName<St> {
6596        type ActorDid = St::ActorDid;
6597        type ConvoCreatedAt = St::ConvoCreatedAt;
6598        type ConvoId = St::ConvoId;
6599        type CreatedAt = St::CreatedAt;
6600        type GroupMemberCount = St::GroupMemberCount;
6601        type GroupName = Set<members::group_name>;
6602        type OwnerDid = St::OwnerDid;
6603        type Rev = St::Rev;
6604        type UpdateType = St::UpdateType;
6605    }
6606    ///State transition - sets the `owner_did` field to Set
6607    pub struct SetOwnerDid<St: State = Empty>(PhantomData<fn() -> St>);
6608    impl<St: State> sealed::Sealed for SetOwnerDid<St> {}
6609    impl<St: State> State for SetOwnerDid<St> {
6610        type ActorDid = St::ActorDid;
6611        type ConvoCreatedAt = St::ConvoCreatedAt;
6612        type ConvoId = St::ConvoId;
6613        type CreatedAt = St::CreatedAt;
6614        type GroupMemberCount = St::GroupMemberCount;
6615        type GroupName = St::GroupName;
6616        type OwnerDid = Set<members::owner_did>;
6617        type Rev = St::Rev;
6618        type UpdateType = St::UpdateType;
6619    }
6620    ///State transition - sets the `rev` field to Set
6621    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
6622    impl<St: State> sealed::Sealed for SetRev<St> {}
6623    impl<St: State> State for SetRev<St> {
6624        type ActorDid = St::ActorDid;
6625        type ConvoCreatedAt = St::ConvoCreatedAt;
6626        type ConvoId = St::ConvoId;
6627        type CreatedAt = St::CreatedAt;
6628        type GroupMemberCount = St::GroupMemberCount;
6629        type GroupName = St::GroupName;
6630        type OwnerDid = St::OwnerDid;
6631        type Rev = Set<members::rev>;
6632        type UpdateType = St::UpdateType;
6633    }
6634    ///State transition - sets the `update_type` field to Set
6635    pub struct SetUpdateType<St: State = Empty>(PhantomData<fn() -> St>);
6636    impl<St: State> sealed::Sealed for SetUpdateType<St> {}
6637    impl<St: State> State for SetUpdateType<St> {
6638        type ActorDid = St::ActorDid;
6639        type ConvoCreatedAt = St::ConvoCreatedAt;
6640        type ConvoId = St::ConvoId;
6641        type CreatedAt = St::CreatedAt;
6642        type GroupMemberCount = St::GroupMemberCount;
6643        type GroupName = St::GroupName;
6644        type OwnerDid = St::OwnerDid;
6645        type Rev = St::Rev;
6646        type UpdateType = Set<members::update_type>;
6647    }
6648    /// Marker types for field names
6649    #[allow(non_camel_case_types)]
6650    pub mod members {
6651        ///Marker type for the `actor_did` field
6652        pub struct actor_did(());
6653        ///Marker type for the `convo_created_at` field
6654        pub struct convo_created_at(());
6655        ///Marker type for the `convo_id` field
6656        pub struct convo_id(());
6657        ///Marker type for the `created_at` field
6658        pub struct created_at(());
6659        ///Marker type for the `group_member_count` field
6660        pub struct group_member_count(());
6661        ///Marker type for the `group_name` field
6662        pub struct group_name(());
6663        ///Marker type for the `owner_did` field
6664        pub struct owner_did(());
6665        ///Marker type for the `rev` field
6666        pub struct rev(());
6667        ///Marker type for the `update_type` field
6668        pub struct update_type(());
6669    }
6670}
6671
6672/// Builder for constructing an instance of this type.
6673pub struct EventGroupChatUpdatedBuilder<
6674    St: event_group_chat_updated_state::State,
6675    S: BosStr = DefaultStr,
6676> {
6677    _state: PhantomData<fn() -> St>,
6678    _fields: (
6679        Option<Did<S>>,
6680        Option<Datetime>,
6681        Option<S>,
6682        Option<Datetime>,
6683        Option<i64>,
6684        Option<S>,
6685        Option<S>,
6686        Option<bool>,
6687        Option<bool>,
6688        Option<EventGroupChatUpdatedLockReason<S>>,
6689        Option<S>,
6690        Option<S>,
6691        Option<Did<S>>,
6692        Option<S>,
6693        Option<EventGroupChatUpdatedUpdateType<S>>,
6694    ),
6695    _type: PhantomData<fn() -> S>,
6696}
6697
6698impl EventGroupChatUpdated<DefaultStr> {
6699    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
6700    pub fn new() -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::Empty, DefaultStr>
6701    {
6702        EventGroupChatUpdatedBuilder::new()
6703    }
6704}
6705
6706impl<S: BosStr> EventGroupChatUpdated<S> {
6707    /// Create a new builder for this type
6708    pub fn builder() -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::Empty, S> {
6709        EventGroupChatUpdatedBuilder::builder()
6710    }
6711}
6712
6713impl EventGroupChatUpdatedBuilder<event_group_chat_updated_state::Empty, DefaultStr> {
6714    /// Create a new builder with all fields unset, using the default string type, if needed
6715    pub fn new() -> Self {
6716        EventGroupChatUpdatedBuilder {
6717            _state: PhantomData,
6718            _fields: (
6719                None, None, None, None, None, None, None, None, None, None, None, None, None, None,
6720                None,
6721            ),
6722            _type: PhantomData,
6723        }
6724    }
6725}
6726
6727impl<S: BosStr> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::Empty, S> {
6728    /// Create a new builder with all fields unset
6729    pub fn builder() -> Self {
6730        EventGroupChatUpdatedBuilder {
6731            _state: PhantomData,
6732            _fields: (
6733                None, None, None, None, None, None, None, None, None, None, None, None, None, None,
6734                None,
6735            ),
6736            _type: PhantomData,
6737        }
6738    }
6739}
6740
6741impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6742where
6743    St: event_group_chat_updated_state::State,
6744    St::ActorDid: event_group_chat_updated_state::IsUnset,
6745{
6746    /// Set the `actorDid` field (required)
6747    pub fn actor_did(
6748        mut self,
6749        value: impl Into<Did<S>>,
6750    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetActorDid<St>, S> {
6751        self._fields.0 = Option::Some(value.into());
6752        EventGroupChatUpdatedBuilder {
6753            _state: PhantomData,
6754            _fields: self._fields,
6755            _type: PhantomData,
6756        }
6757    }
6758}
6759
6760impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6761where
6762    St: event_group_chat_updated_state::State,
6763    St::ConvoCreatedAt: event_group_chat_updated_state::IsUnset,
6764{
6765    /// Set the `convoCreatedAt` field (required)
6766    pub fn convo_created_at(
6767        mut self,
6768        value: impl Into<Datetime>,
6769    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetConvoCreatedAt<St>, S>
6770    {
6771        self._fields.1 = Option::Some(value.into());
6772        EventGroupChatUpdatedBuilder {
6773            _state: PhantomData,
6774            _fields: self._fields,
6775            _type: PhantomData,
6776        }
6777    }
6778}
6779
6780impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6781where
6782    St: event_group_chat_updated_state::State,
6783    St::ConvoId: event_group_chat_updated_state::IsUnset,
6784{
6785    /// Set the `convoId` field (required)
6786    pub fn convo_id(
6787        mut self,
6788        value: impl Into<S>,
6789    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetConvoId<St>, S> {
6790        self._fields.2 = Option::Some(value.into());
6791        EventGroupChatUpdatedBuilder {
6792            _state: PhantomData,
6793            _fields: self._fields,
6794            _type: PhantomData,
6795        }
6796    }
6797}
6798
6799impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6800where
6801    St: event_group_chat_updated_state::State,
6802    St::CreatedAt: event_group_chat_updated_state::IsUnset,
6803{
6804    /// Set the `createdAt` field (required)
6805    pub fn created_at(
6806        mut self,
6807        value: impl Into<Datetime>,
6808    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetCreatedAt<St>, S> {
6809        self._fields.3 = Option::Some(value.into());
6810        EventGroupChatUpdatedBuilder {
6811            _state: PhantomData,
6812            _fields: self._fields,
6813            _type: PhantomData,
6814        }
6815    }
6816}
6817
6818impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6819where
6820    St: event_group_chat_updated_state::State,
6821    St::GroupMemberCount: event_group_chat_updated_state::IsUnset,
6822{
6823    /// Set the `groupMemberCount` field (required)
6824    pub fn group_member_count(
6825        mut self,
6826        value: impl Into<i64>,
6827    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetGroupMemberCount<St>, S>
6828    {
6829        self._fields.4 = Option::Some(value.into());
6830        EventGroupChatUpdatedBuilder {
6831            _state: PhantomData,
6832            _fields: self._fields,
6833            _type: PhantomData,
6834        }
6835    }
6836}
6837
6838impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6839where
6840    St: event_group_chat_updated_state::State,
6841    St::GroupName: event_group_chat_updated_state::IsUnset,
6842{
6843    /// Set the `groupName` field (required)
6844    pub fn group_name(
6845        mut self,
6846        value: impl Into<S>,
6847    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetGroupName<St>, S> {
6848        self._fields.5 = Option::Some(value.into());
6849        EventGroupChatUpdatedBuilder {
6850            _state: PhantomData,
6851            _fields: self._fields,
6852            _type: PhantomData,
6853        }
6854    }
6855}
6856
6857impl<St: event_group_chat_updated_state::State, S: BosStr> EventGroupChatUpdatedBuilder<St, S> {
6858    /// Set the `joinLinkCode` field (optional)
6859    pub fn join_link_code(mut self, value: impl Into<Option<S>>) -> Self {
6860        self._fields.6 = value.into();
6861        self
6862    }
6863    /// Set the `joinLinkCode` field to an Option value (optional)
6864    pub fn maybe_join_link_code(mut self, value: Option<S>) -> Self {
6865        self._fields.6 = value;
6866        self
6867    }
6868}
6869
6870impl<St: event_group_chat_updated_state::State, S: BosStr> EventGroupChatUpdatedBuilder<St, S> {
6871    /// Set the `joinLinkFollowersOnly` field (optional)
6872    pub fn join_link_followers_only(mut self, value: impl Into<Option<bool>>) -> Self {
6873        self._fields.7 = value.into();
6874        self
6875    }
6876    /// Set the `joinLinkFollowersOnly` field to an Option value (optional)
6877    pub fn maybe_join_link_followers_only(mut self, value: Option<bool>) -> Self {
6878        self._fields.7 = value;
6879        self
6880    }
6881}
6882
6883impl<St: event_group_chat_updated_state::State, S: BosStr> EventGroupChatUpdatedBuilder<St, S> {
6884    /// Set the `joinLinkRequiresApproval` field (optional)
6885    pub fn join_link_requires_approval(mut self, value: impl Into<Option<bool>>) -> Self {
6886        self._fields.8 = value.into();
6887        self
6888    }
6889    /// Set the `joinLinkRequiresApproval` field to an Option value (optional)
6890    pub fn maybe_join_link_requires_approval(mut self, value: Option<bool>) -> Self {
6891        self._fields.8 = value;
6892        self
6893    }
6894}
6895
6896impl<St: event_group_chat_updated_state::State, S: BosStr> EventGroupChatUpdatedBuilder<St, S> {
6897    /// Set the `lockReason` field (optional)
6898    pub fn lock_reason(
6899        mut self,
6900        value: impl Into<Option<EventGroupChatUpdatedLockReason<S>>>,
6901    ) -> Self {
6902        self._fields.9 = value.into();
6903        self
6904    }
6905    /// Set the `lockReason` field to an Option value (optional)
6906    pub fn maybe_lock_reason(mut self, value: Option<EventGroupChatUpdatedLockReason<S>>) -> Self {
6907        self._fields.9 = value;
6908        self
6909    }
6910}
6911
6912impl<St: event_group_chat_updated_state::State, S: BosStr> EventGroupChatUpdatedBuilder<St, S> {
6913    /// Set the `newName` field (optional)
6914    pub fn new_name(mut self, value: impl Into<Option<S>>) -> Self {
6915        self._fields.10 = value.into();
6916        self
6917    }
6918    /// Set the `newName` field to an Option value (optional)
6919    pub fn maybe_new_name(mut self, value: Option<S>) -> Self {
6920        self._fields.10 = value;
6921        self
6922    }
6923}
6924
6925impl<St: event_group_chat_updated_state::State, S: BosStr> EventGroupChatUpdatedBuilder<St, S> {
6926    /// Set the `oldName` field (optional)
6927    pub fn old_name(mut self, value: impl Into<Option<S>>) -> Self {
6928        self._fields.11 = value.into();
6929        self
6930    }
6931    /// Set the `oldName` field to an Option value (optional)
6932    pub fn maybe_old_name(mut self, value: Option<S>) -> Self {
6933        self._fields.11 = value;
6934        self
6935    }
6936}
6937
6938impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6939where
6940    St: event_group_chat_updated_state::State,
6941    St::OwnerDid: event_group_chat_updated_state::IsUnset,
6942{
6943    /// Set the `ownerDid` field (required)
6944    pub fn owner_did(
6945        mut self,
6946        value: impl Into<Did<S>>,
6947    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetOwnerDid<St>, S> {
6948        self._fields.12 = Option::Some(value.into());
6949        EventGroupChatUpdatedBuilder {
6950            _state: PhantomData,
6951            _fields: self._fields,
6952            _type: PhantomData,
6953        }
6954    }
6955}
6956
6957impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6958where
6959    St: event_group_chat_updated_state::State,
6960    St::Rev: event_group_chat_updated_state::IsUnset,
6961{
6962    /// Set the `rev` field (required)
6963    pub fn rev(
6964        mut self,
6965        value: impl Into<S>,
6966    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetRev<St>, S> {
6967        self._fields.13 = Option::Some(value.into());
6968        EventGroupChatUpdatedBuilder {
6969            _state: PhantomData,
6970            _fields: self._fields,
6971            _type: PhantomData,
6972        }
6973    }
6974}
6975
6976impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6977where
6978    St: event_group_chat_updated_state::State,
6979    St::UpdateType: event_group_chat_updated_state::IsUnset,
6980{
6981    /// Set the `updateType` field (required)
6982    pub fn update_type(
6983        mut self,
6984        value: impl Into<EventGroupChatUpdatedUpdateType<S>>,
6985    ) -> EventGroupChatUpdatedBuilder<event_group_chat_updated_state::SetUpdateType<St>, S> {
6986        self._fields.14 = Option::Some(value.into());
6987        EventGroupChatUpdatedBuilder {
6988            _state: PhantomData,
6989            _fields: self._fields,
6990            _type: PhantomData,
6991        }
6992    }
6993}
6994
6995impl<St, S: BosStr> EventGroupChatUpdatedBuilder<St, S>
6996where
6997    St: event_group_chat_updated_state::State,
6998    St::ActorDid: event_group_chat_updated_state::IsSet,
6999    St::ConvoCreatedAt: event_group_chat_updated_state::IsSet,
7000    St::ConvoId: event_group_chat_updated_state::IsSet,
7001    St::CreatedAt: event_group_chat_updated_state::IsSet,
7002    St::GroupMemberCount: event_group_chat_updated_state::IsSet,
7003    St::GroupName: event_group_chat_updated_state::IsSet,
7004    St::OwnerDid: event_group_chat_updated_state::IsSet,
7005    St::Rev: event_group_chat_updated_state::IsSet,
7006    St::UpdateType: event_group_chat_updated_state::IsSet,
7007{
7008    /// Build the final struct.
7009    pub fn build(self) -> EventGroupChatUpdated<S> {
7010        EventGroupChatUpdated {
7011            actor_did: self._fields.0.unwrap(),
7012            convo_created_at: self._fields.1.unwrap(),
7013            convo_id: self._fields.2.unwrap(),
7014            created_at: self._fields.3.unwrap(),
7015            group_member_count: self._fields.4.unwrap(),
7016            group_name: self._fields.5.unwrap(),
7017            join_link_code: self._fields.6,
7018            join_link_followers_only: self._fields.7,
7019            join_link_requires_approval: self._fields.8,
7020            lock_reason: self._fields.9,
7021            new_name: self._fields.10,
7022            old_name: self._fields.11,
7023            owner_did: self._fields.12.unwrap(),
7024            rev: self._fields.13.unwrap(),
7025            update_type: self._fields.14.unwrap(),
7026            extra_data: Default::default(),
7027        }
7028    }
7029    /// Build the final struct with custom extra_data.
7030    pub fn build_with_data(
7031        self,
7032        extra_data: BTreeMap<SmolStr, Data<S>>,
7033    ) -> EventGroupChatUpdated<S> {
7034        EventGroupChatUpdated {
7035            actor_did: self._fields.0.unwrap(),
7036            convo_created_at: self._fields.1.unwrap(),
7037            convo_id: self._fields.2.unwrap(),
7038            created_at: self._fields.3.unwrap(),
7039            group_member_count: self._fields.4.unwrap(),
7040            group_name: self._fields.5.unwrap(),
7041            join_link_code: self._fields.6,
7042            join_link_followers_only: self._fields.7,
7043            join_link_requires_approval: self._fields.8,
7044            lock_reason: self._fields.9,
7045            new_name: self._fields.10,
7046            old_name: self._fields.11,
7047            owner_did: self._fields.12.unwrap(),
7048            rev: self._fields.13.unwrap(),
7049            update_type: self._fields.14.unwrap(),
7050            extra_data: Some(extra_data),
7051        }
7052    }
7053}
7054
7055pub mod event_rate_limit_exceeded_state {
7056
7057    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
7058    #[allow(unused)]
7059    use ::core::marker::PhantomData;
7060    mod sealed {
7061        pub trait Sealed {}
7062    }
7063    /// State trait tracking which required fields have been set
7064    pub trait State: sealed::Sealed {
7065        type ActorDid;
7066        type CreatedAt;
7067        type Endpoint;
7068        type Rev;
7069    }
7070    /// Empty state - all required fields are unset
7071    pub struct Empty(());
7072    impl sealed::Sealed for Empty {}
7073    impl State for Empty {
7074        type ActorDid = Unset;
7075        type CreatedAt = Unset;
7076        type Endpoint = Unset;
7077        type Rev = Unset;
7078    }
7079    ///State transition - sets the `actor_did` field to Set
7080    pub struct SetActorDid<St: State = Empty>(PhantomData<fn() -> St>);
7081    impl<St: State> sealed::Sealed for SetActorDid<St> {}
7082    impl<St: State> State for SetActorDid<St> {
7083        type ActorDid = Set<members::actor_did>;
7084        type CreatedAt = St::CreatedAt;
7085        type Endpoint = St::Endpoint;
7086        type Rev = St::Rev;
7087    }
7088    ///State transition - sets the `created_at` field to Set
7089    pub struct SetCreatedAt<St: State = Empty>(PhantomData<fn() -> St>);
7090    impl<St: State> sealed::Sealed for SetCreatedAt<St> {}
7091    impl<St: State> State for SetCreatedAt<St> {
7092        type ActorDid = St::ActorDid;
7093        type CreatedAt = Set<members::created_at>;
7094        type Endpoint = St::Endpoint;
7095        type Rev = St::Rev;
7096    }
7097    ///State transition - sets the `endpoint` field to Set
7098    pub struct SetEndpoint<St: State = Empty>(PhantomData<fn() -> St>);
7099    impl<St: State> sealed::Sealed for SetEndpoint<St> {}
7100    impl<St: State> State for SetEndpoint<St> {
7101        type ActorDid = St::ActorDid;
7102        type CreatedAt = St::CreatedAt;
7103        type Endpoint = Set<members::endpoint>;
7104        type Rev = St::Rev;
7105    }
7106    ///State transition - sets the `rev` field to Set
7107    pub struct SetRev<St: State = Empty>(PhantomData<fn() -> St>);
7108    impl<St: State> sealed::Sealed for SetRev<St> {}
7109    impl<St: State> State for SetRev<St> {
7110        type ActorDid = St::ActorDid;
7111        type CreatedAt = St::CreatedAt;
7112        type Endpoint = St::Endpoint;
7113        type Rev = Set<members::rev>;
7114    }
7115    /// Marker types for field names
7116    #[allow(non_camel_case_types)]
7117    pub mod members {
7118        ///Marker type for the `actor_did` field
7119        pub struct actor_did(());
7120        ///Marker type for the `created_at` field
7121        pub struct created_at(());
7122        ///Marker type for the `endpoint` field
7123        pub struct endpoint(());
7124        ///Marker type for the `rev` field
7125        pub struct rev(());
7126    }
7127}
7128
7129/// Builder for constructing an instance of this type.
7130pub struct EventRateLimitExceededBuilder<
7131    St: event_rate_limit_exceeded_state::State,
7132    S: BosStr = DefaultStr,
7133> {
7134    _state: PhantomData<fn() -> St>,
7135    _fields: (Option<Did<S>>, Option<Datetime>, Option<S>, Option<S>),
7136    _type: PhantomData<fn() -> S>,
7137}
7138
7139impl EventRateLimitExceeded<DefaultStr> {
7140    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
7141    pub fn new() -> EventRateLimitExceededBuilder<event_rate_limit_exceeded_state::Empty, DefaultStr>
7142    {
7143        EventRateLimitExceededBuilder::new()
7144    }
7145}
7146
7147impl<S: BosStr> EventRateLimitExceeded<S> {
7148    /// Create a new builder for this type
7149    pub fn builder() -> EventRateLimitExceededBuilder<event_rate_limit_exceeded_state::Empty, S> {
7150        EventRateLimitExceededBuilder::builder()
7151    }
7152}
7153
7154impl EventRateLimitExceededBuilder<event_rate_limit_exceeded_state::Empty, DefaultStr> {
7155    /// Create a new builder with all fields unset, using the default string type, if needed
7156    pub fn new() -> Self {
7157        EventRateLimitExceededBuilder {
7158            _state: PhantomData,
7159            _fields: (None, None, None, None),
7160            _type: PhantomData,
7161        }
7162    }
7163}
7164
7165impl<S: BosStr> EventRateLimitExceededBuilder<event_rate_limit_exceeded_state::Empty, S> {
7166    /// Create a new builder with all fields unset
7167    pub fn builder() -> Self {
7168        EventRateLimitExceededBuilder {
7169            _state: PhantomData,
7170            _fields: (None, None, None, None),
7171            _type: PhantomData,
7172        }
7173    }
7174}
7175
7176impl<St, S: BosStr> EventRateLimitExceededBuilder<St, S>
7177where
7178    St: event_rate_limit_exceeded_state::State,
7179    St::ActorDid: event_rate_limit_exceeded_state::IsUnset,
7180{
7181    /// Set the `actorDid` field (required)
7182    pub fn actor_did(
7183        mut self,
7184        value: impl Into<Did<S>>,
7185    ) -> EventRateLimitExceededBuilder<event_rate_limit_exceeded_state::SetActorDid<St>, S> {
7186        self._fields.0 = Option::Some(value.into());
7187        EventRateLimitExceededBuilder {
7188            _state: PhantomData,
7189            _fields: self._fields,
7190            _type: PhantomData,
7191        }
7192    }
7193}
7194
7195impl<St, S: BosStr> EventRateLimitExceededBuilder<St, S>
7196where
7197    St: event_rate_limit_exceeded_state::State,
7198    St::CreatedAt: event_rate_limit_exceeded_state::IsUnset,
7199{
7200    /// Set the `createdAt` field (required)
7201    pub fn created_at(
7202        mut self,
7203        value: impl Into<Datetime>,
7204    ) -> EventRateLimitExceededBuilder<event_rate_limit_exceeded_state::SetCreatedAt<St>, S> {
7205        self._fields.1 = Option::Some(value.into());
7206        EventRateLimitExceededBuilder {
7207            _state: PhantomData,
7208            _fields: self._fields,
7209            _type: PhantomData,
7210        }
7211    }
7212}
7213
7214impl<St, S: BosStr> EventRateLimitExceededBuilder<St, S>
7215where
7216    St: event_rate_limit_exceeded_state::State,
7217    St::Endpoint: event_rate_limit_exceeded_state::IsUnset,
7218{
7219    /// Set the `endpoint` field (required)
7220    pub fn endpoint(
7221        mut self,
7222        value: impl Into<S>,
7223    ) -> EventRateLimitExceededBuilder<event_rate_limit_exceeded_state::SetEndpoint<St>, S> {
7224        self._fields.2 = Option::Some(value.into());
7225        EventRateLimitExceededBuilder {
7226            _state: PhantomData,
7227            _fields: self._fields,
7228            _type: PhantomData,
7229        }
7230    }
7231}
7232
7233impl<St, S: BosStr> EventRateLimitExceededBuilder<St, S>
7234where
7235    St: event_rate_limit_exceeded_state::State,
7236    St::Rev: event_rate_limit_exceeded_state::IsUnset,
7237{
7238    /// Set the `rev` field (required)
7239    pub fn rev(
7240        mut self,
7241        value: impl Into<S>,
7242    ) -> EventRateLimitExceededBuilder<event_rate_limit_exceeded_state::SetRev<St>, S> {
7243        self._fields.3 = Option::Some(value.into());
7244        EventRateLimitExceededBuilder {
7245            _state: PhantomData,
7246            _fields: self._fields,
7247            _type: PhantomData,
7248        }
7249    }
7250}
7251
7252impl<St, S: BosStr> EventRateLimitExceededBuilder<St, S>
7253where
7254    St: event_rate_limit_exceeded_state::State,
7255    St::ActorDid: event_rate_limit_exceeded_state::IsSet,
7256    St::CreatedAt: event_rate_limit_exceeded_state::IsSet,
7257    St::Endpoint: event_rate_limit_exceeded_state::IsSet,
7258    St::Rev: event_rate_limit_exceeded_state::IsSet,
7259{
7260    /// Build the final struct.
7261    pub fn build(self) -> EventRateLimitExceeded<S> {
7262        EventRateLimitExceeded {
7263            actor_did: self._fields.0.unwrap(),
7264            created_at: self._fields.1.unwrap(),
7265            endpoint: self._fields.2.unwrap(),
7266            rev: self._fields.3.unwrap(),
7267            extra_data: Default::default(),
7268        }
7269    }
7270    /// Build the final struct with custom extra_data.
7271    pub fn build_with_data(
7272        self,
7273        extra_data: BTreeMap<SmolStr, Data<S>>,
7274    ) -> EventRateLimitExceeded<S> {
7275        EventRateLimitExceeded {
7276            actor_did: self._fields.0.unwrap(),
7277            created_at: self._fields.1.unwrap(),
7278            endpoint: self._fields.2.unwrap(),
7279            rev: self._fields.3.unwrap(),
7280            extra_data: Some(extra_data),
7281        }
7282    }
7283}
7284
7285pub mod subscribe_mod_events_state {
7286
7287    pub use crate::builder_types::{IsSet, IsUnset, Set, Unset};
7288    #[allow(unused)]
7289    use ::core::marker::PhantomData;
7290    mod sealed {
7291        pub trait Sealed {}
7292    }
7293    /// State trait tracking which required fields have been set
7294    pub trait State: sealed::Sealed {}
7295    /// Empty state - all required fields are unset
7296    pub struct Empty(());
7297    impl sealed::Sealed for Empty {}
7298    impl State for Empty {}
7299    /// Marker types for field names
7300    #[allow(non_camel_case_types)]
7301    pub mod members {}
7302}
7303
7304/// Builder for constructing an instance of this type.
7305pub struct SubscribeModEventsBuilder<St: subscribe_mod_events_state::State, S: BosStr = DefaultStr>
7306{
7307    _state: PhantomData<fn() -> St>,
7308    _fields: (Option<S>,),
7309    _type: PhantomData<fn() -> S>,
7310}
7311
7312impl SubscribeModEvents<DefaultStr> {
7313    /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed
7314    pub fn new() -> SubscribeModEventsBuilder<subscribe_mod_events_state::Empty, DefaultStr> {
7315        SubscribeModEventsBuilder::new()
7316    }
7317}
7318
7319impl<S: BosStr> SubscribeModEvents<S> {
7320    /// Create a new builder for this type
7321    pub fn builder() -> SubscribeModEventsBuilder<subscribe_mod_events_state::Empty, S> {
7322        SubscribeModEventsBuilder::builder()
7323    }
7324}
7325
7326impl SubscribeModEventsBuilder<subscribe_mod_events_state::Empty, DefaultStr> {
7327    /// Create a new builder with all fields unset, using the default string type, if needed
7328    pub fn new() -> Self {
7329        SubscribeModEventsBuilder {
7330            _state: PhantomData,
7331            _fields: (None,),
7332            _type: PhantomData,
7333        }
7334    }
7335}
7336
7337impl<S: BosStr> SubscribeModEventsBuilder<subscribe_mod_events_state::Empty, S> {
7338    /// Create a new builder with all fields unset
7339    pub fn builder() -> Self {
7340        SubscribeModEventsBuilder {
7341            _state: PhantomData,
7342            _fields: (None,),
7343            _type: PhantomData,
7344        }
7345    }
7346}
7347
7348impl<St: subscribe_mod_events_state::State, S: BosStr> SubscribeModEventsBuilder<St, S> {
7349    /// Set the `cursor` field (optional)
7350    pub fn cursor(mut self, value: impl Into<Option<S>>) -> Self {
7351        self._fields.0 = value.into();
7352        self
7353    }
7354    /// Set the `cursor` field to an Option value (optional)
7355    pub fn maybe_cursor(mut self, value: Option<S>) -> Self {
7356        self._fields.0 = value;
7357        self
7358    }
7359}
7360
7361impl<St, S: BosStr> SubscribeModEventsBuilder<St, S>
7362where
7363    St: subscribe_mod_events_state::State,
7364{
7365    /// Build the final struct.
7366    pub fn build(self) -> SubscribeModEvents<S> {
7367        SubscribeModEvents {
7368            cursor: self._fields.0,
7369        }
7370    }
7371}