1pub mod member;
9
10#[jacquard_derive::lexicon]
11#[derive(
12 serde::Serialize,
13 serde::Deserialize,
14 Debug,
15 Clone,
16 PartialEq,
17 Eq,
18 jacquard_derive::IntoStatic
19)]
20#[serde(rename_all = "camelCase")]
21pub struct Spindle<'a> {
22 pub created_at: jacquard_common::types::string::Datetime,
23}
24
25pub mod spindle_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 CreatedAt;
36 }
37 pub struct Empty(());
39 impl sealed::Sealed for Empty {}
40 impl State for Empty {
41 type CreatedAt = Unset;
42 }
43 pub struct SetCreatedAt<S: State = Empty>(PhantomData<fn() -> S>);
45 impl<S: State> sealed::Sealed for SetCreatedAt<S> {}
46 impl<S: State> State for SetCreatedAt<S> {
47 type CreatedAt = Set<members::created_at>;
48 }
49 #[allow(non_camel_case_types)]
51 pub mod members {
52 pub struct created_at(());
54 }
55}
56
57pub struct SpindleBuilder<'a, S: spindle_state::State> {
59 _phantom_state: ::core::marker::PhantomData<fn() -> S>,
60 __unsafe_private_named: (
61 ::core::option::Option<jacquard_common::types::string::Datetime>,
62 ),
63 _phantom: ::core::marker::PhantomData<&'a ()>,
64}
65
66impl<'a> Spindle<'a> {
67 pub fn new() -> SpindleBuilder<'a, spindle_state::Empty> {
69 SpindleBuilder::new()
70 }
71}
72
73impl<'a> SpindleBuilder<'a, spindle_state::Empty> {
74 pub fn new() -> Self {
76 SpindleBuilder {
77 _phantom_state: ::core::marker::PhantomData,
78 __unsafe_private_named: (None,),
79 _phantom: ::core::marker::PhantomData,
80 }
81 }
82}
83
84impl<'a, S> SpindleBuilder<'a, S>
85where
86 S: spindle_state::State,
87 S::CreatedAt: spindle_state::IsUnset,
88{
89 pub fn created_at(
91 mut self,
92 value: impl Into<jacquard_common::types::string::Datetime>,
93 ) -> SpindleBuilder<'a, spindle_state::SetCreatedAt<S>> {
94 self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
95 SpindleBuilder {
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> SpindleBuilder<'a, S>
104where
105 S: spindle_state::State,
106 S::CreatedAt: spindle_state::IsSet,
107{
108 pub fn build(self) -> Spindle<'a> {
110 Spindle {
111 created_at: 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 ) -> Spindle<'a> {
123 Spindle {
124 created_at: self.__unsafe_private_named.0.unwrap(),
125 extra_data: Some(extra_data),
126 }
127 }
128}
129
130impl<'a> Spindle<'a> {
131 pub fn uri(
132 uri: impl Into<jacquard_common::CowStr<'a>>,
133 ) -> Result<
134 jacquard_common::types::uri::RecordUri<'a, SpindleRecord>,
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 SpindleGetRecordOutput<'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: Spindle<'a>,
162}
163
164impl From<SpindleGetRecordOutput<'_>> for Spindle<'_> {
165 fn from(output: SpindleGetRecordOutput<'_>) -> Self {
166 use jacquard_common::IntoStatic;
167 output.value.into_static()
168 }
169}
170
171impl jacquard_common::types::collection::Collection for Spindle<'_> {
172 const NSID: &'static str = "sh.tangled.spindle";
173 type Record = SpindleRecord;
174}
175
176#[derive(Debug, serde::Serialize, serde::Deserialize)]
178pub struct SpindleRecord;
179impl jacquard_common::xrpc::XrpcResp for SpindleRecord {
180 const NSID: &'static str = "sh.tangled.spindle";
181 const ENCODING: &'static str = "application/json";
182 type Output<'de> = SpindleGetRecordOutput<'de>;
183 type Err<'de> = jacquard_common::types::collection::RecordError<'de>;
184}
185
186impl jacquard_common::types::collection::Collection for SpindleRecord {
187 const NSID: &'static str = "sh.tangled.spindle";
188 type Record = SpindleRecord;
189}
190
191impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Spindle<'a> {
192 fn nsid() -> &'static str {
193 "sh.tangled.spindle"
194 }
195 fn def_name() -> &'static str {
196 "main"
197 }
198 fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
199 lexicon_doc_sh_tangled_spindle()
200 }
201 fn validate(
202 &self,
203 ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
204 Ok(())
205 }
206}
207
208fn lexicon_doc_sh_tangled_spindle() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
209 ::jacquard_lexicon::lexicon::LexiconDoc {
210 lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1,
211 id: ::jacquard_common::CowStr::new_static("sh.tangled.spindle"),
212 revision: None,
213 description: None,
214 defs: {
215 let mut map = ::std::collections::BTreeMap::new();
216 map.insert(
217 ::jacquard_common::smol_str::SmolStr::new_static("main"),
218 ::jacquard_lexicon::lexicon::LexUserType::Record(::jacquard_lexicon::lexicon::LexRecord {
219 description: None,
220 key: Some(::jacquard_common::CowStr::new_static("any")),
221 record: ::jacquard_lexicon::lexicon::LexRecordRecord::Object(::jacquard_lexicon::lexicon::LexObject {
222 description: None,
223 required: Some(
224 vec![
225 ::jacquard_common::smol_str::SmolStr::new_static("createdAt")
226 ],
227 ),
228 nullable: None,
229 properties: {
230 #[allow(unused_mut)]
231 let mut map = ::std::collections::BTreeMap::new();
232 map.insert(
233 ::jacquard_common::smol_str::SmolStr::new_static(
234 "createdAt",
235 ),
236 ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
237 description: None,
238 format: Some(
239 ::jacquard_lexicon::lexicon::LexStringFormat::Datetime,
240 ),
241 default: None,
242 min_length: None,
243 max_length: None,
244 min_graphemes: None,
245 max_graphemes: None,
246 r#enum: None,
247 r#const: None,
248 known_values: None,
249 }),
250 );
251 map
252 },
253 }),
254 }),
255 );
256 map
257 },
258 }
259}