jacquard_api/place_stream/chat/
message.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: place.stream.chat.message
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8/// Record containing a Streamplace chat message.
9#[jacquard_derive::lexicon]
10#[derive(
11    serde::Serialize,
12    serde::Deserialize,
13    Debug,
14    Clone,
15    PartialEq,
16    Eq,
17    jacquard_derive::IntoStatic
18)]
19#[serde(rename_all = "camelCase")]
20pub struct Message<'a> {
21    /// Client-declared timestamp when this message was originally created.
22    pub created_at: jacquard_common::types::string::Datetime,
23    /// Annotations of text (mentions, URLs, etc)
24    #[serde(skip_serializing_if = "std::option::Option::is_none")]
25    #[serde(borrow)]
26    pub facets: Option<Vec<crate::place_stream::richtext::facet::Facet<'a>>>,
27    #[serde(skip_serializing_if = "std::option::Option::is_none")]
28    #[serde(borrow)]
29    pub reply: Option<crate::place_stream::chat::message::ReplyRef<'a>>,
30    /// The DID of the streamer whose chat this is.
31    #[serde(borrow)]
32    pub streamer: jacquard_common::types::string::Did<'a>,
33    /// The primary message content. May be an empty string, if there are embeds.
34    #[serde(borrow)]
35    pub text: jacquard_common::CowStr<'a>,
36}
37
38pub mod message_state {
39
40    pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
41    #[allow(unused)]
42    use ::core::marker::PhantomData;
43    mod sealed {
44        pub trait Sealed {}
45    }
46    /// State trait tracking which required fields have been set
47    pub trait State: sealed::Sealed {
48        type Text;
49        type CreatedAt;
50        type Streamer;
51    }
52    /// Empty state - all required fields are unset
53    pub struct Empty(());
54    impl sealed::Sealed for Empty {}
55    impl State for Empty {
56        type Text = Unset;
57        type CreatedAt = Unset;
58        type Streamer = Unset;
59    }
60    ///State transition - sets the `text` field to Set
61    pub struct SetText<S: State = Empty>(PhantomData<fn() -> S>);
62    impl<S: State> sealed::Sealed for SetText<S> {}
63    impl<S: State> State for SetText<S> {
64        type Text = Set<members::text>;
65        type CreatedAt = S::CreatedAt;
66        type Streamer = S::Streamer;
67    }
68    ///State transition - sets the `created_at` field to Set
69    pub struct SetCreatedAt<S: State = Empty>(PhantomData<fn() -> S>);
70    impl<S: State> sealed::Sealed for SetCreatedAt<S> {}
71    impl<S: State> State for SetCreatedAt<S> {
72        type Text = S::Text;
73        type CreatedAt = Set<members::created_at>;
74        type Streamer = S::Streamer;
75    }
76    ///State transition - sets the `streamer` field to Set
77    pub struct SetStreamer<S: State = Empty>(PhantomData<fn() -> S>);
78    impl<S: State> sealed::Sealed for SetStreamer<S> {}
79    impl<S: State> State for SetStreamer<S> {
80        type Text = S::Text;
81        type CreatedAt = S::CreatedAt;
82        type Streamer = Set<members::streamer>;
83    }
84    /// Marker types for field names
85    #[allow(non_camel_case_types)]
86    pub mod members {
87        ///Marker type for the `text` field
88        pub struct text(());
89        ///Marker type for the `created_at` field
90        pub struct created_at(());
91        ///Marker type for the `streamer` field
92        pub struct streamer(());
93    }
94}
95
96/// Builder for constructing an instance of this type
97pub struct MessageBuilder<'a, S: message_state::State> {
98    _phantom_state: ::core::marker::PhantomData<fn() -> S>,
99    __unsafe_private_named: (
100        ::core::option::Option<jacquard_common::types::string::Datetime>,
101        ::core::option::Option<Vec<crate::place_stream::richtext::facet::Facet<'a>>>,
102        ::core::option::Option<crate::place_stream::chat::message::ReplyRef<'a>>,
103        ::core::option::Option<jacquard_common::types::string::Did<'a>>,
104        ::core::option::Option<jacquard_common::CowStr<'a>>,
105    ),
106    _phantom: ::core::marker::PhantomData<&'a ()>,
107}
108
109impl<'a> Message<'a> {
110    /// Create a new builder for this type
111    pub fn new() -> MessageBuilder<'a, message_state::Empty> {
112        MessageBuilder::new()
113    }
114}
115
116impl<'a> MessageBuilder<'a, message_state::Empty> {
117    /// Create a new builder with all fields unset
118    pub fn new() -> Self {
119        MessageBuilder {
120            _phantom_state: ::core::marker::PhantomData,
121            __unsafe_private_named: (None, None, None, None, None),
122            _phantom: ::core::marker::PhantomData,
123        }
124    }
125}
126
127impl<'a, S> MessageBuilder<'a, S>
128where
129    S: message_state::State,
130    S::CreatedAt: message_state::IsUnset,
131{
132    /// Set the `createdAt` field (required)
133    pub fn created_at(
134        mut self,
135        value: impl Into<jacquard_common::types::string::Datetime>,
136    ) -> MessageBuilder<'a, message_state::SetCreatedAt<S>> {
137        self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
138        MessageBuilder {
139            _phantom_state: ::core::marker::PhantomData,
140            __unsafe_private_named: self.__unsafe_private_named,
141            _phantom: ::core::marker::PhantomData,
142        }
143    }
144}
145
146impl<'a, S: message_state::State> MessageBuilder<'a, S> {
147    /// Set the `facets` field (optional)
148    pub fn facets(
149        mut self,
150        value: impl Into<Option<Vec<crate::place_stream::richtext::facet::Facet<'a>>>>,
151    ) -> Self {
152        self.__unsafe_private_named.1 = value.into();
153        self
154    }
155    /// Set the `facets` field to an Option value (optional)
156    pub fn maybe_facets(
157        mut self,
158        value: Option<Vec<crate::place_stream::richtext::facet::Facet<'a>>>,
159    ) -> Self {
160        self.__unsafe_private_named.1 = value;
161        self
162    }
163}
164
165impl<'a, S: message_state::State> MessageBuilder<'a, S> {
166    /// Set the `reply` field (optional)
167    pub fn reply(
168        mut self,
169        value: impl Into<Option<crate::place_stream::chat::message::ReplyRef<'a>>>,
170    ) -> Self {
171        self.__unsafe_private_named.2 = value.into();
172        self
173    }
174    /// Set the `reply` field to an Option value (optional)
175    pub fn maybe_reply(
176        mut self,
177        value: Option<crate::place_stream::chat::message::ReplyRef<'a>>,
178    ) -> Self {
179        self.__unsafe_private_named.2 = value;
180        self
181    }
182}
183
184impl<'a, S> MessageBuilder<'a, S>
185where
186    S: message_state::State,
187    S::Streamer: message_state::IsUnset,
188{
189    /// Set the `streamer` field (required)
190    pub fn streamer(
191        mut self,
192        value: impl Into<jacquard_common::types::string::Did<'a>>,
193    ) -> MessageBuilder<'a, message_state::SetStreamer<S>> {
194        self.__unsafe_private_named.3 = ::core::option::Option::Some(value.into());
195        MessageBuilder {
196            _phantom_state: ::core::marker::PhantomData,
197            __unsafe_private_named: self.__unsafe_private_named,
198            _phantom: ::core::marker::PhantomData,
199        }
200    }
201}
202
203impl<'a, S> MessageBuilder<'a, S>
204where
205    S: message_state::State,
206    S::Text: message_state::IsUnset,
207{
208    /// Set the `text` field (required)
209    pub fn text(
210        mut self,
211        value: impl Into<jacquard_common::CowStr<'a>>,
212    ) -> MessageBuilder<'a, message_state::SetText<S>> {
213        self.__unsafe_private_named.4 = ::core::option::Option::Some(value.into());
214        MessageBuilder {
215            _phantom_state: ::core::marker::PhantomData,
216            __unsafe_private_named: self.__unsafe_private_named,
217            _phantom: ::core::marker::PhantomData,
218        }
219    }
220}
221
222impl<'a, S> MessageBuilder<'a, S>
223where
224    S: message_state::State,
225    S::Text: message_state::IsSet,
226    S::CreatedAt: message_state::IsSet,
227    S::Streamer: message_state::IsSet,
228{
229    /// Build the final struct
230    pub fn build(self) -> Message<'a> {
231        Message {
232            created_at: self.__unsafe_private_named.0.unwrap(),
233            facets: self.__unsafe_private_named.1,
234            reply: self.__unsafe_private_named.2,
235            streamer: self.__unsafe_private_named.3.unwrap(),
236            text: self.__unsafe_private_named.4.unwrap(),
237            extra_data: Default::default(),
238        }
239    }
240    /// Build the final struct with custom extra_data
241    pub fn build_with_data(
242        self,
243        extra_data: std::collections::BTreeMap<
244            jacquard_common::smol_str::SmolStr,
245            jacquard_common::types::value::Data<'a>,
246        >,
247    ) -> Message<'a> {
248        Message {
249            created_at: self.__unsafe_private_named.0.unwrap(),
250            facets: self.__unsafe_private_named.1,
251            reply: self.__unsafe_private_named.2,
252            streamer: self.__unsafe_private_named.3.unwrap(),
253            text: self.__unsafe_private_named.4.unwrap(),
254            extra_data: Some(extra_data),
255        }
256    }
257}
258
259impl<'a> Message<'a> {
260    pub fn uri(
261        uri: impl Into<jacquard_common::CowStr<'a>>,
262    ) -> Result<
263        jacquard_common::types::uri::RecordUri<'a, MessageRecord>,
264        jacquard_common::types::uri::UriError,
265    > {
266        jacquard_common::types::uri::RecordUri::try_from_uri(
267            jacquard_common::types::string::AtUri::new_cow(uri.into())?,
268        )
269    }
270}
271
272/// Typed wrapper for GetRecord response with this collection's record type.
273#[derive(
274    serde::Serialize,
275    serde::Deserialize,
276    Debug,
277    Clone,
278    PartialEq,
279    Eq,
280    jacquard_derive::IntoStatic
281)]
282#[serde(rename_all = "camelCase")]
283pub struct MessageGetRecordOutput<'a> {
284    #[serde(skip_serializing_if = "std::option::Option::is_none")]
285    #[serde(borrow)]
286    pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>,
287    #[serde(borrow)]
288    pub uri: jacquard_common::types::string::AtUri<'a>,
289    #[serde(borrow)]
290    pub value: Message<'a>,
291}
292
293impl From<MessageGetRecordOutput<'_>> for Message<'_> {
294    fn from(output: MessageGetRecordOutput<'_>) -> Self {
295        use jacquard_common::IntoStatic;
296        output.value.into_static()
297    }
298}
299
300impl jacquard_common::types::collection::Collection for Message<'_> {
301    const NSID: &'static str = "place.stream.chat.message";
302    type Record = MessageRecord;
303}
304
305/// Marker type for deserializing records from this collection.
306#[derive(Debug, serde::Serialize, serde::Deserialize)]
307pub struct MessageRecord;
308impl jacquard_common::xrpc::XrpcResp for MessageRecord {
309    const NSID: &'static str = "place.stream.chat.message";
310    const ENCODING: &'static str = "application/json";
311    type Output<'de> = MessageGetRecordOutput<'de>;
312    type Err<'de> = jacquard_common::types::collection::RecordError<'de>;
313}
314
315impl jacquard_common::types::collection::Collection for MessageRecord {
316    const NSID: &'static str = "place.stream.chat.message";
317    type Record = MessageRecord;
318}
319
320impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Message<'a> {
321    fn nsid() -> &'static str {
322        "place.stream.chat.message"
323    }
324    fn def_name() -> &'static str {
325        "main"
326    }
327    fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
328        lexicon_doc_place_stream_chat_message()
329    }
330    fn validate(
331        &self,
332    ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
333        {
334            let value = &self.text;
335            #[allow(unused_comparisons)]
336            if <str>::len(value.as_ref()) > 3000usize {
337                return Err(::jacquard_lexicon::validation::ConstraintError::MaxLength {
338                    path: ::jacquard_lexicon::validation::ValidationPath::from_field(
339                        "text",
340                    ),
341                    max: 3000usize,
342                    actual: <str>::len(value.as_ref()),
343                });
344            }
345        }
346        {
347            let value = &self.text;
348            {
349                let count = ::unicode_segmentation::UnicodeSegmentation::graphemes(
350                        value.as_ref(),
351                        true,
352                    )
353                    .count();
354                if count > 300usize {
355                    return Err(::jacquard_lexicon::validation::ConstraintError::MaxGraphemes {
356                        path: ::jacquard_lexicon::validation::ValidationPath::from_field(
357                            "text",
358                        ),
359                        max: 300usize,
360                        actual: count,
361                    });
362                }
363            }
364        }
365        Ok(())
366    }
367}
368
369fn lexicon_doc_place_stream_chat_message() -> ::jacquard_lexicon::lexicon::LexiconDoc<
370    'static,
371> {
372    ::jacquard_lexicon::lexicon::LexiconDoc {
373        lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1,
374        id: ::jacquard_common::CowStr::new_static("place.stream.chat.message"),
375        revision: None,
376        description: None,
377        defs: {
378            let mut map = ::std::collections::BTreeMap::new();
379            map.insert(
380                ::jacquard_common::smol_str::SmolStr::new_static("main"),
381                ::jacquard_lexicon::lexicon::LexUserType::Record(::jacquard_lexicon::lexicon::LexRecord {
382                    description: Some(
383                        ::jacquard_common::CowStr::new_static(
384                            "Record containing a Streamplace chat message.",
385                        ),
386                    ),
387                    key: Some(::jacquard_common::CowStr::new_static("tid")),
388                    record: ::jacquard_lexicon::lexicon::LexRecordRecord::Object(::jacquard_lexicon::lexicon::LexObject {
389                        description: None,
390                        required: Some(
391                            vec![
392                                ::jacquard_common::smol_str::SmolStr::new_static("text"),
393                                ::jacquard_common::smol_str::SmolStr::new_static("createdAt"),
394                                ::jacquard_common::smol_str::SmolStr::new_static("streamer")
395                            ],
396                        ),
397                        nullable: None,
398                        properties: {
399                            #[allow(unused_mut)]
400                            let mut map = ::std::collections::BTreeMap::new();
401                            map.insert(
402                                ::jacquard_common::smol_str::SmolStr::new_static(
403                                    "createdAt",
404                                ),
405                                ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
406                                    description: Some(
407                                        ::jacquard_common::CowStr::new_static(
408                                            "Client-declared timestamp when this message was originally created.",
409                                        ),
410                                    ),
411                                    format: Some(
412                                        ::jacquard_lexicon::lexicon::LexStringFormat::Datetime,
413                                    ),
414                                    default: None,
415                                    min_length: None,
416                                    max_length: None,
417                                    min_graphemes: None,
418                                    max_graphemes: None,
419                                    r#enum: None,
420                                    r#const: None,
421                                    known_values: None,
422                                }),
423                            );
424                            map.insert(
425                                ::jacquard_common::smol_str::SmolStr::new_static("facets"),
426                                ::jacquard_lexicon::lexicon::LexObjectProperty::Array(::jacquard_lexicon::lexicon::LexArray {
427                                    description: Some(
428                                        ::jacquard_common::CowStr::new_static(
429                                            "Annotations of text (mentions, URLs, etc)",
430                                        ),
431                                    ),
432                                    items: ::jacquard_lexicon::lexicon::LexArrayItem::Ref(::jacquard_lexicon::lexicon::LexRef {
433                                        description: None,
434                                        r#ref: ::jacquard_common::CowStr::new_static(
435                                            "place.stream.richtext.facet",
436                                        ),
437                                    }),
438                                    min_length: None,
439                                    max_length: None,
440                                }),
441                            );
442                            map.insert(
443                                ::jacquard_common::smol_str::SmolStr::new_static("reply"),
444                                ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef {
445                                    description: None,
446                                    r#ref: ::jacquard_common::CowStr::new_static("#replyRef"),
447                                }),
448                            );
449                            map.insert(
450                                ::jacquard_common::smol_str::SmolStr::new_static(
451                                    "streamer",
452                                ),
453                                ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
454                                    description: Some(
455                                        ::jacquard_common::CowStr::new_static(
456                                            "The DID of the streamer whose chat this is.",
457                                        ),
458                                    ),
459                                    format: Some(
460                                        ::jacquard_lexicon::lexicon::LexStringFormat::Did,
461                                    ),
462                                    default: None,
463                                    min_length: None,
464                                    max_length: None,
465                                    min_graphemes: None,
466                                    max_graphemes: None,
467                                    r#enum: None,
468                                    r#const: None,
469                                    known_values: None,
470                                }),
471                            );
472                            map.insert(
473                                ::jacquard_common::smol_str::SmolStr::new_static("text"),
474                                ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
475                                    description: Some(
476                                        ::jacquard_common::CowStr::new_static(
477                                            "The primary message content. May be an empty string, if there are embeds.",
478                                        ),
479                                    ),
480                                    format: None,
481                                    default: None,
482                                    min_length: None,
483                                    max_length: Some(3000usize),
484                                    min_graphemes: None,
485                                    max_graphemes: Some(300usize),
486                                    r#enum: None,
487                                    r#const: None,
488                                    known_values: None,
489                                }),
490                            );
491                            map
492                        },
493                    }),
494                }),
495            );
496            map.insert(
497                ::jacquard_common::smol_str::SmolStr::new_static("replyRef"),
498                ::jacquard_lexicon::lexicon::LexUserType::Object(::jacquard_lexicon::lexicon::LexObject {
499                    description: None,
500                    required: Some(
501                        vec![
502                            ::jacquard_common::smol_str::SmolStr::new_static("root"),
503                            ::jacquard_common::smol_str::SmolStr::new_static("parent")
504                        ],
505                    ),
506                    nullable: None,
507                    properties: {
508                        #[allow(unused_mut)]
509                        let mut map = ::std::collections::BTreeMap::new();
510                        map.insert(
511                            ::jacquard_common::smol_str::SmolStr::new_static("parent"),
512                            ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef {
513                                description: None,
514                                r#ref: ::jacquard_common::CowStr::new_static(
515                                    "com.atproto.repo.strongRef",
516                                ),
517                            }),
518                        );
519                        map.insert(
520                            ::jacquard_common::smol_str::SmolStr::new_static("root"),
521                            ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef {
522                                description: None,
523                                r#ref: ::jacquard_common::CowStr::new_static(
524                                    "com.atproto.repo.strongRef",
525                                ),
526                            }),
527                        );
528                        map
529                    },
530                }),
531            );
532            map
533        },
534    }
535}
536
537#[jacquard_derive::lexicon]
538#[derive(
539    serde::Serialize,
540    serde::Deserialize,
541    Debug,
542    Clone,
543    PartialEq,
544    Eq,
545    jacquard_derive::IntoStatic
546)]
547#[serde(rename_all = "camelCase")]
548pub struct ReplyRef<'a> {
549    #[serde(borrow)]
550    pub parent: crate::com_atproto::repo::strong_ref::StrongRef<'a>,
551    #[serde(borrow)]
552    pub root: crate::com_atproto::repo::strong_ref::StrongRef<'a>,
553}
554
555pub mod reply_ref_state {
556
557    pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
558    #[allow(unused)]
559    use ::core::marker::PhantomData;
560    mod sealed {
561        pub trait Sealed {}
562    }
563    /// State trait tracking which required fields have been set
564    pub trait State: sealed::Sealed {
565        type Root;
566        type Parent;
567    }
568    /// Empty state - all required fields are unset
569    pub struct Empty(());
570    impl sealed::Sealed for Empty {}
571    impl State for Empty {
572        type Root = Unset;
573        type Parent = Unset;
574    }
575    ///State transition - sets the `root` field to Set
576    pub struct SetRoot<S: State = Empty>(PhantomData<fn() -> S>);
577    impl<S: State> sealed::Sealed for SetRoot<S> {}
578    impl<S: State> State for SetRoot<S> {
579        type Root = Set<members::root>;
580        type Parent = S::Parent;
581    }
582    ///State transition - sets the `parent` field to Set
583    pub struct SetParent<S: State = Empty>(PhantomData<fn() -> S>);
584    impl<S: State> sealed::Sealed for SetParent<S> {}
585    impl<S: State> State for SetParent<S> {
586        type Root = S::Root;
587        type Parent = Set<members::parent>;
588    }
589    /// Marker types for field names
590    #[allow(non_camel_case_types)]
591    pub mod members {
592        ///Marker type for the `root` field
593        pub struct root(());
594        ///Marker type for the `parent` field
595        pub struct parent(());
596    }
597}
598
599/// Builder for constructing an instance of this type
600pub struct ReplyRefBuilder<'a, S: reply_ref_state::State> {
601    _phantom_state: ::core::marker::PhantomData<fn() -> S>,
602    __unsafe_private_named: (
603        ::core::option::Option<crate::com_atproto::repo::strong_ref::StrongRef<'a>>,
604        ::core::option::Option<crate::com_atproto::repo::strong_ref::StrongRef<'a>>,
605    ),
606    _phantom: ::core::marker::PhantomData<&'a ()>,
607}
608
609impl<'a> ReplyRef<'a> {
610    /// Create a new builder for this type
611    pub fn new() -> ReplyRefBuilder<'a, reply_ref_state::Empty> {
612        ReplyRefBuilder::new()
613    }
614}
615
616impl<'a> ReplyRefBuilder<'a, reply_ref_state::Empty> {
617    /// Create a new builder with all fields unset
618    pub fn new() -> Self {
619        ReplyRefBuilder {
620            _phantom_state: ::core::marker::PhantomData,
621            __unsafe_private_named: (None, None),
622            _phantom: ::core::marker::PhantomData,
623        }
624    }
625}
626
627impl<'a, S> ReplyRefBuilder<'a, S>
628where
629    S: reply_ref_state::State,
630    S::Parent: reply_ref_state::IsUnset,
631{
632    /// Set the `parent` field (required)
633    pub fn parent(
634        mut self,
635        value: impl Into<crate::com_atproto::repo::strong_ref::StrongRef<'a>>,
636    ) -> ReplyRefBuilder<'a, reply_ref_state::SetParent<S>> {
637        self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
638        ReplyRefBuilder {
639            _phantom_state: ::core::marker::PhantomData,
640            __unsafe_private_named: self.__unsafe_private_named,
641            _phantom: ::core::marker::PhantomData,
642        }
643    }
644}
645
646impl<'a, S> ReplyRefBuilder<'a, S>
647where
648    S: reply_ref_state::State,
649    S::Root: reply_ref_state::IsUnset,
650{
651    /// Set the `root` field (required)
652    pub fn root(
653        mut self,
654        value: impl Into<crate::com_atproto::repo::strong_ref::StrongRef<'a>>,
655    ) -> ReplyRefBuilder<'a, reply_ref_state::SetRoot<S>> {
656        self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into());
657        ReplyRefBuilder {
658            _phantom_state: ::core::marker::PhantomData,
659            __unsafe_private_named: self.__unsafe_private_named,
660            _phantom: ::core::marker::PhantomData,
661        }
662    }
663}
664
665impl<'a, S> ReplyRefBuilder<'a, S>
666where
667    S: reply_ref_state::State,
668    S::Root: reply_ref_state::IsSet,
669    S::Parent: reply_ref_state::IsSet,
670{
671    /// Build the final struct
672    pub fn build(self) -> ReplyRef<'a> {
673        ReplyRef {
674            parent: self.__unsafe_private_named.0.unwrap(),
675            root: self.__unsafe_private_named.1.unwrap(),
676            extra_data: Default::default(),
677        }
678    }
679    /// Build the final struct with custom extra_data
680    pub fn build_with_data(
681        self,
682        extra_data: std::collections::BTreeMap<
683            jacquard_common::smol_str::SmolStr,
684            jacquard_common::types::value::Data<'a>,
685        >,
686    ) -> ReplyRef<'a> {
687        ReplyRef {
688            parent: self.__unsafe_private_named.0.unwrap(),
689            root: self.__unsafe_private_named.1.unwrap(),
690            extra_data: Some(extra_data),
691        }
692    }
693}
694
695impl<'a> ::jacquard_lexicon::schema::LexiconSchema for ReplyRef<'a> {
696    fn nsid() -> &'static str {
697        "place.stream.chat.message"
698    }
699    fn def_name() -> &'static str {
700        "replyRef"
701    }
702    fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
703        lexicon_doc_place_stream_chat_message()
704    }
705    fn validate(
706        &self,
707    ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
708        Ok(())
709    }
710}