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