jacquard_api/pub_leaflet/graph/
subscription.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: pub.leaflet.graph.subscription
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8/// Record declaring a subscription to a publication
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 Subscription<'a> {
21    #[serde(borrow)]
22    pub publication: jacquard_common::types::string::AtUri<'a>,
23}
24
25pub mod subscription_state {
26
27    pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
28    #[allow(unused)]
29    use ::core::marker::PhantomData;
30    mod sealed {
31        pub trait Sealed {}
32    }
33    /// State trait tracking which required fields have been set
34    pub trait State: sealed::Sealed {
35        type Publication;
36    }
37    /// Empty state - all required fields are unset
38    pub struct Empty(());
39    impl sealed::Sealed for Empty {}
40    impl State for Empty {
41        type Publication = Unset;
42    }
43    ///State transition - sets the `publication` field to Set
44    pub struct SetPublication<S: State = Empty>(PhantomData<fn() -> S>);
45    impl<S: State> sealed::Sealed for SetPublication<S> {}
46    impl<S: State> State for SetPublication<S> {
47        type Publication = Set<members::publication>;
48    }
49    /// Marker types for field names
50    #[allow(non_camel_case_types)]
51    pub mod members {
52        ///Marker type for the `publication` field
53        pub struct publication(());
54    }
55}
56
57/// Builder for constructing an instance of this type
58pub struct SubscriptionBuilder<'a, S: subscription_state::State> {
59    _phantom_state: ::core::marker::PhantomData<fn() -> S>,
60    __unsafe_private_named: (
61        ::core::option::Option<jacquard_common::types::string::AtUri<'a>>,
62    ),
63    _phantom: ::core::marker::PhantomData<&'a ()>,
64}
65
66impl<'a> Subscription<'a> {
67    /// Create a new builder for this type
68    pub fn new() -> SubscriptionBuilder<'a, subscription_state::Empty> {
69        SubscriptionBuilder::new()
70    }
71}
72
73impl<'a> SubscriptionBuilder<'a, subscription_state::Empty> {
74    /// Create a new builder with all fields unset
75    pub fn new() -> Self {
76        SubscriptionBuilder {
77            _phantom_state: ::core::marker::PhantomData,
78            __unsafe_private_named: (None,),
79            _phantom: ::core::marker::PhantomData,
80        }
81    }
82}
83
84impl<'a, S> SubscriptionBuilder<'a, S>
85where
86    S: subscription_state::State,
87    S::Publication: subscription_state::IsUnset,
88{
89    /// Set the `publication` field (required)
90    pub fn publication(
91        mut self,
92        value: impl Into<jacquard_common::types::string::AtUri<'a>>,
93    ) -> SubscriptionBuilder<'a, subscription_state::SetPublication<S>> {
94        self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
95        SubscriptionBuilder {
96            _phantom_state: ::core::marker::PhantomData,
97            __unsafe_private_named: self.__unsafe_private_named,
98            _phantom: ::core::marker::PhantomData,
99        }
100    }
101}
102
103impl<'a, S> SubscriptionBuilder<'a, S>
104where
105    S: subscription_state::State,
106    S::Publication: subscription_state::IsSet,
107{
108    /// Build the final struct
109    pub fn build(self) -> Subscription<'a> {
110        Subscription {
111            publication: self.__unsafe_private_named.0.unwrap(),
112            extra_data: Default::default(),
113        }
114    }
115    /// Build the final struct with custom extra_data
116    pub fn build_with_data(
117        self,
118        extra_data: std::collections::BTreeMap<
119            jacquard_common::smol_str::SmolStr,
120            jacquard_common::types::value::Data<'a>,
121        >,
122    ) -> Subscription<'a> {
123        Subscription {
124            publication: self.__unsafe_private_named.0.unwrap(),
125            extra_data: Some(extra_data),
126        }
127    }
128}
129
130impl<'a> Subscription<'a> {
131    pub fn uri(
132        uri: impl Into<jacquard_common::CowStr<'a>>,
133    ) -> Result<
134        jacquard_common::types::uri::RecordUri<'a, SubscriptionRecord>,
135        jacquard_common::types::uri::UriError,
136    > {
137        jacquard_common::types::uri::RecordUri::try_from_uri(
138            jacquard_common::types::string::AtUri::new_cow(uri.into())?,
139        )
140    }
141}
142
143/// Typed wrapper for GetRecord response with this collection's record type.
144#[derive(
145    serde::Serialize,
146    serde::Deserialize,
147    Debug,
148    Clone,
149    PartialEq,
150    Eq,
151    jacquard_derive::IntoStatic
152)]
153#[serde(rename_all = "camelCase")]
154pub struct SubscriptionGetRecordOutput<'a> {
155    #[serde(skip_serializing_if = "std::option::Option::is_none")]
156    #[serde(borrow)]
157    pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>,
158    #[serde(borrow)]
159    pub uri: jacquard_common::types::string::AtUri<'a>,
160    #[serde(borrow)]
161    pub value: Subscription<'a>,
162}
163
164impl From<SubscriptionGetRecordOutput<'_>> for Subscription<'_> {
165    fn from(output: SubscriptionGetRecordOutput<'_>) -> Self {
166        use jacquard_common::IntoStatic;
167        output.value.into_static()
168    }
169}
170
171impl jacquard_common::types::collection::Collection for Subscription<'_> {
172    const NSID: &'static str = "pub.leaflet.graph.subscription";
173    type Record = SubscriptionRecord;
174}
175
176/// Marker type for deserializing records from this collection.
177#[derive(Debug, serde::Serialize, serde::Deserialize)]
178pub struct SubscriptionRecord;
179impl jacquard_common::xrpc::XrpcResp for SubscriptionRecord {
180    const NSID: &'static str = "pub.leaflet.graph.subscription";
181    const ENCODING: &'static str = "application/json";
182    type Output<'de> = SubscriptionGetRecordOutput<'de>;
183    type Err<'de> = jacquard_common::types::collection::RecordError<'de>;
184}
185
186impl jacquard_common::types::collection::Collection for SubscriptionRecord {
187    const NSID: &'static str = "pub.leaflet.graph.subscription";
188    type Record = SubscriptionRecord;
189}
190
191impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Subscription<'a> {
192    fn nsid() -> &'static str {
193        "pub.leaflet.graph.subscription"
194    }
195    fn def_name() -> &'static str {
196        "main"
197    }
198    fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
199        lexicon_doc_pub_leaflet_graph_subscription()
200    }
201    fn validate(
202        &self,
203    ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
204        Ok(())
205    }
206}
207
208fn lexicon_doc_pub_leaflet_graph_subscription() -> ::jacquard_lexicon::lexicon::LexiconDoc<
209    'static,
210> {
211    ::jacquard_lexicon::lexicon::LexiconDoc {
212        lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1,
213        id: ::jacquard_common::CowStr::new_static("pub.leaflet.graph.subscription"),
214        revision: None,
215        description: None,
216        defs: {
217            let mut map = ::std::collections::BTreeMap::new();
218            map.insert(
219                ::jacquard_common::smol_str::SmolStr::new_static("main"),
220                ::jacquard_lexicon::lexicon::LexUserType::Record(::jacquard_lexicon::lexicon::LexRecord {
221                    description: Some(
222                        ::jacquard_common::CowStr::new_static(
223                            "Record declaring a subscription to a publication",
224                        ),
225                    ),
226                    key: Some(::jacquard_common::CowStr::new_static("tid")),
227                    record: ::jacquard_lexicon::lexicon::LexRecordRecord::Object(::jacquard_lexicon::lexicon::LexObject {
228                        description: None,
229                        required: Some(
230                            vec![
231                                ::jacquard_common::smol_str::SmolStr::new_static("publication")
232                            ],
233                        ),
234                        nullable: None,
235                        properties: {
236                            #[allow(unused_mut)]
237                            let mut map = ::std::collections::BTreeMap::new();
238                            map.insert(
239                                ::jacquard_common::smol_str::SmolStr::new_static(
240                                    "publication",
241                                ),
242                                ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
243                                    description: None,
244                                    format: Some(
245                                        ::jacquard_lexicon::lexicon::LexStringFormat::AtUri,
246                                    ),
247                                    default: None,
248                                    min_length: None,
249                                    max_length: None,
250                                    min_graphemes: None,
251                                    max_graphemes: None,
252                                    r#enum: None,
253                                    r#const: None,
254                                    known_values: None,
255                                }),
256                            );
257                            map
258                        },
259                    }),
260                }),
261            );
262            map
263        },
264    }
265}