jacquard_api/pub_leaflet/graph/
subscription.rs1#[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 pub trait State: sealed::Sealed {
35 type Publication;
36 }
37 pub struct Empty(());
39 impl sealed::Sealed for Empty {}
40 impl State for Empty {
41 type Publication = Unset;
42 }
43 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 #[allow(non_camel_case_types)]
51 pub mod members {
52 pub struct publication(());
54 }
55}
56
57pub 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 pub fn new() -> SubscriptionBuilder<'a, subscription_state::Empty> {
69 SubscriptionBuilder::new()
70 }
71}
72
73impl<'a> SubscriptionBuilder<'a, subscription_state::Empty> {
74 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 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 pub fn build(self) -> Subscription<'a> {
110 Subscription {
111 publication: self.__unsafe_private_named.0.unwrap(),
112 extra_data: Default::default(),
113 }
114 }
115 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#[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#[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}