Skip to main content

jacquard_api/site_standard/graph/
subscription.rs

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