atproto blogging
1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: app.bsky.actor.status
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8/// Advertises an account as currently offering live content.
9#[derive(
10 serde::Serialize,
11 serde::Deserialize,
12 Debug,
13 Clone,
14 PartialEq,
15 Eq,
16 Hash,
17 jacquard_derive::IntoStatic
18)]
19pub struct Live;
20impl std::fmt::Display for Live {
21 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22 write!(f, "live")
23 }
24}
25
26/// A declaration of a Bluesky account status.
27#[jacquard_derive::lexicon]
28#[derive(
29 serde::Serialize,
30 serde::Deserialize,
31 Debug,
32 Clone,
33 PartialEq,
34 Eq,
35 jacquard_derive::IntoStatic
36)]
37#[serde(rename_all = "camelCase")]
38pub struct Status<'a> {
39 pub created_at: jacquard_common::types::string::Datetime,
40 /// The duration of the status in minutes. Applications can choose to impose minimum and maximum limits.
41 #[serde(skip_serializing_if = "std::option::Option::is_none")]
42 pub duration_minutes: std::option::Option<i64>,
43 /// An optional embed associated with the status.
44 #[serde(skip_serializing_if = "std::option::Option::is_none")]
45 #[serde(borrow)]
46 pub embed: std::option::Option<crate::app_bsky::embed::external::ExternalRecord<'a>>,
47 /// The status for the account.
48 #[serde(borrow)]
49 pub status: StatusStatus<'a>,
50}
51
52pub mod status_state {
53
54 pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
55 #[allow(unused)]
56 use ::core::marker::PhantomData;
57 mod sealed {
58 pub trait Sealed {}
59 }
60 /// State trait tracking which required fields have been set
61 pub trait State: sealed::Sealed {
62 type CreatedAt;
63 type Status;
64 }
65 /// Empty state - all required fields are unset
66 pub struct Empty(());
67 impl sealed::Sealed for Empty {}
68 impl State for Empty {
69 type CreatedAt = Unset;
70 type Status = Unset;
71 }
72 ///State transition - sets the `created_at` field to Set
73 pub struct SetCreatedAt<S: State = Empty>(PhantomData<fn() -> S>);
74 impl<S: State> sealed::Sealed for SetCreatedAt<S> {}
75 impl<S: State> State for SetCreatedAt<S> {
76 type CreatedAt = Set<members::created_at>;
77 type Status = S::Status;
78 }
79 ///State transition - sets the `status` field to Set
80 pub struct SetStatus<S: State = Empty>(PhantomData<fn() -> S>);
81 impl<S: State> sealed::Sealed for SetStatus<S> {}
82 impl<S: State> State for SetStatus<S> {
83 type CreatedAt = S::CreatedAt;
84 type Status = Set<members::status>;
85 }
86 /// Marker types for field names
87 #[allow(non_camel_case_types)]
88 pub mod members {
89 ///Marker type for the `created_at` field
90 pub struct created_at(());
91 ///Marker type for the `status` field
92 pub struct status(());
93 }
94}
95
96/// Builder for constructing an instance of this type
97pub struct StatusBuilder<'a, S: status_state::State> {
98 _phantom_state: ::core::marker::PhantomData<fn() -> S>,
99 __unsafe_private_named: (
100 ::core::option::Option<jacquard_common::types::string::Datetime>,
101 ::core::option::Option<i64>,
102 ::core::option::Option<crate::app_bsky::embed::external::ExternalRecord<'a>>,
103 ::core::option::Option<StatusStatus<'a>>,
104 ),
105 _phantom: ::core::marker::PhantomData<&'a ()>,
106}
107
108impl<'a> Status<'a> {
109 /// Create a new builder for this type
110 pub fn new() -> StatusBuilder<'a, status_state::Empty> {
111 StatusBuilder::new()
112 }
113}
114
115impl<'a> StatusBuilder<'a, status_state::Empty> {
116 /// Create a new builder with all fields unset
117 pub fn new() -> Self {
118 StatusBuilder {
119 _phantom_state: ::core::marker::PhantomData,
120 __unsafe_private_named: (None, None, None, None),
121 _phantom: ::core::marker::PhantomData,
122 }
123 }
124}
125
126impl<'a, S> StatusBuilder<'a, S>
127where
128 S: status_state::State,
129 S::CreatedAt: status_state::IsUnset,
130{
131 /// Set the `createdAt` field (required)
132 pub fn created_at(
133 mut self,
134 value: impl Into<jacquard_common::types::string::Datetime>,
135 ) -> StatusBuilder<'a, status_state::SetCreatedAt<S>> {
136 self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into());
137 StatusBuilder {
138 _phantom_state: ::core::marker::PhantomData,
139 __unsafe_private_named: self.__unsafe_private_named,
140 _phantom: ::core::marker::PhantomData,
141 }
142 }
143}
144
145impl<'a, S: status_state::State> StatusBuilder<'a, S> {
146 /// Set the `durationMinutes` field (optional)
147 pub fn duration_minutes(mut self, value: impl Into<Option<i64>>) -> Self {
148 self.__unsafe_private_named.1 = value.into();
149 self
150 }
151 /// Set the `durationMinutes` field to an Option value (optional)
152 pub fn maybe_duration_minutes(mut self, value: Option<i64>) -> Self {
153 self.__unsafe_private_named.1 = value;
154 self
155 }
156}
157
158impl<'a, S: status_state::State> StatusBuilder<'a, S> {
159 /// Set the `embed` field (optional)
160 pub fn embed(
161 mut self,
162 value: impl Into<Option<crate::app_bsky::embed::external::ExternalRecord<'a>>>,
163 ) -> Self {
164 self.__unsafe_private_named.2 = value.into();
165 self
166 }
167 /// Set the `embed` field to an Option value (optional)
168 pub fn maybe_embed(
169 mut self,
170 value: Option<crate::app_bsky::embed::external::ExternalRecord<'a>>,
171 ) -> Self {
172 self.__unsafe_private_named.2 = value;
173 self
174 }
175}
176
177impl<'a, S> StatusBuilder<'a, S>
178where
179 S: status_state::State,
180 S::Status: status_state::IsUnset,
181{
182 /// Set the `status` field (required)
183 pub fn status(
184 mut self,
185 value: impl Into<StatusStatus<'a>>,
186 ) -> StatusBuilder<'a, status_state::SetStatus<S>> {
187 self.__unsafe_private_named.3 = ::core::option::Option::Some(value.into());
188 StatusBuilder {
189 _phantom_state: ::core::marker::PhantomData,
190 __unsafe_private_named: self.__unsafe_private_named,
191 _phantom: ::core::marker::PhantomData,
192 }
193 }
194}
195
196impl<'a, S> StatusBuilder<'a, S>
197where
198 S: status_state::State,
199 S::CreatedAt: status_state::IsSet,
200 S::Status: status_state::IsSet,
201{
202 /// Build the final struct
203 pub fn build(self) -> Status<'a> {
204 Status {
205 created_at: self.__unsafe_private_named.0.unwrap(),
206 duration_minutes: self.__unsafe_private_named.1,
207 embed: self.__unsafe_private_named.2,
208 status: self.__unsafe_private_named.3.unwrap(),
209 extra_data: Default::default(),
210 }
211 }
212 /// Build the final struct with custom extra_data
213 pub fn build_with_data(
214 self,
215 extra_data: std::collections::BTreeMap<
216 jacquard_common::smol_str::SmolStr,
217 jacquard_common::types::value::Data<'a>,
218 >,
219 ) -> Status<'a> {
220 Status {
221 created_at: self.__unsafe_private_named.0.unwrap(),
222 duration_minutes: self.__unsafe_private_named.1,
223 embed: self.__unsafe_private_named.2,
224 status: self.__unsafe_private_named.3.unwrap(),
225 extra_data: Some(extra_data),
226 }
227 }
228}
229
230impl<'a> Status<'a> {
231 pub fn uri(
232 uri: impl Into<jacquard_common::CowStr<'a>>,
233 ) -> Result<
234 jacquard_common::types::uri::RecordUri<'a, StatusRecord>,
235 jacquard_common::types::uri::UriError,
236 > {
237 jacquard_common::types::uri::RecordUri::try_from_uri(
238 jacquard_common::types::string::AtUri::new_cow(uri.into())?,
239 )
240 }
241}
242
243/// The status for the account.
244#[derive(Debug, Clone, PartialEq, Eq, Hash)]
245pub enum StatusStatus<'a> {
246 Live,
247 Other(jacquard_common::CowStr<'a>),
248}
249
250impl<'a> StatusStatus<'a> {
251 pub fn as_str(&self) -> &str {
252 match self {
253 Self::Live => "app.bsky.actor.status#live",
254 Self::Other(s) => s.as_ref(),
255 }
256 }
257}
258
259impl<'a> From<&'a str> for StatusStatus<'a> {
260 fn from(s: &'a str) -> Self {
261 match s {
262 "app.bsky.actor.status#live" => Self::Live,
263 _ => Self::Other(jacquard_common::CowStr::from(s)),
264 }
265 }
266}
267
268impl<'a> From<String> for StatusStatus<'a> {
269 fn from(s: String) -> Self {
270 match s.as_str() {
271 "app.bsky.actor.status#live" => Self::Live,
272 _ => Self::Other(jacquard_common::CowStr::from(s)),
273 }
274 }
275}
276
277impl<'a> core::fmt::Display for StatusStatus<'a> {
278 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
279 write!(f, "{}", self.as_str())
280 }
281}
282
283impl<'a> AsRef<str> for StatusStatus<'a> {
284 fn as_ref(&self) -> &str {
285 self.as_str()
286 }
287}
288
289impl<'a> serde::Serialize for StatusStatus<'a> {
290 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
291 where
292 S: serde::Serializer,
293 {
294 serializer.serialize_str(self.as_str())
295 }
296}
297
298impl<'de, 'a> serde::Deserialize<'de> for StatusStatus<'a>
299where
300 'de: 'a,
301{
302 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
303 where
304 D: serde::Deserializer<'de>,
305 {
306 let s = <&'de str>::deserialize(deserializer)?;
307 Ok(Self::from(s))
308 }
309}
310
311impl<'a> Default for StatusStatus<'a> {
312 fn default() -> Self {
313 Self::Other(Default::default())
314 }
315}
316
317impl jacquard_common::IntoStatic for StatusStatus<'_> {
318 type Output = StatusStatus<'static>;
319 fn into_static(self) -> Self::Output {
320 match self {
321 StatusStatus::Live => StatusStatus::Live,
322 StatusStatus::Other(v) => StatusStatus::Other(v.into_static()),
323 }
324 }
325}
326
327/// Typed wrapper for GetRecord response with this collection's record type.
328#[derive(
329 serde::Serialize,
330 serde::Deserialize,
331 Debug,
332 Clone,
333 PartialEq,
334 Eq,
335 jacquard_derive::IntoStatic
336)]
337#[serde(rename_all = "camelCase")]
338pub struct StatusGetRecordOutput<'a> {
339 #[serde(skip_serializing_if = "std::option::Option::is_none")]
340 #[serde(borrow)]
341 pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>,
342 #[serde(borrow)]
343 pub uri: jacquard_common::types::string::AtUri<'a>,
344 #[serde(borrow)]
345 pub value: Status<'a>,
346}
347
348impl From<StatusGetRecordOutput<'_>> for Status<'_> {
349 fn from(output: StatusGetRecordOutput<'_>) -> Self {
350 use jacquard_common::IntoStatic;
351 output.value.into_static()
352 }
353}
354
355impl jacquard_common::types::collection::Collection for Status<'_> {
356 const NSID: &'static str = "app.bsky.actor.status";
357 type Record = StatusRecord;
358}
359
360/// Marker type for deserializing records from this collection.
361#[derive(Debug, serde::Serialize, serde::Deserialize)]
362pub struct StatusRecord;
363impl jacquard_common::xrpc::XrpcResp for StatusRecord {
364 const NSID: &'static str = "app.bsky.actor.status";
365 const ENCODING: &'static str = "application/json";
366 type Output<'de> = StatusGetRecordOutput<'de>;
367 type Err<'de> = jacquard_common::types::collection::RecordError<'de>;
368}
369
370impl jacquard_common::types::collection::Collection for StatusRecord {
371 const NSID: &'static str = "app.bsky.actor.status";
372 type Record = StatusRecord;
373}
374
375impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Status<'a> {
376 fn nsid() -> &'static str {
377 "app.bsky.actor.status"
378 }
379 fn def_name() -> &'static str {
380 "main"
381 }
382 fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> {
383 lexicon_doc_app_bsky_actor_status()
384 }
385 fn validate(
386 &self,
387 ) -> ::core::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> {
388 if let Some(ref value) = self.duration_minutes {
389 if *value < 1i64 {
390 return Err(::jacquard_lexicon::validation::ConstraintError::Minimum {
391 path: ::jacquard_lexicon::validation::ValidationPath::from_field(
392 "duration_minutes",
393 ),
394 min: 1i64,
395 actual: *value,
396 });
397 }
398 }
399 Ok(())
400 }
401}
402
403fn lexicon_doc_app_bsky_actor_status() -> ::jacquard_lexicon::lexicon::LexiconDoc<
404 'static,
405> {
406 ::jacquard_lexicon::lexicon::LexiconDoc {
407 lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1,
408 id: ::jacquard_common::CowStr::new_static("app.bsky.actor.status"),
409 revision: None,
410 description: None,
411 defs: {
412 let mut map = ::alloc::collections::BTreeMap::new();
413 map.insert(
414 ::jacquard_common::smol_str::SmolStr::new_static("live"),
415 ::jacquard_lexicon::lexicon::LexUserType::Token(::jacquard_lexicon::lexicon::LexToken {
416 description: None,
417 }),
418 );
419 map.insert(
420 ::jacquard_common::smol_str::SmolStr::new_static("main"),
421 ::jacquard_lexicon::lexicon::LexUserType::Record(::jacquard_lexicon::lexicon::LexRecord {
422 description: Some(
423 ::jacquard_common::CowStr::new_static(
424 "A declaration of a Bluesky account status.",
425 ),
426 ),
427 key: Some(::jacquard_common::CowStr::new_static("literal:self")),
428 record: ::jacquard_lexicon::lexicon::LexRecordRecord::Object(::jacquard_lexicon::lexicon::LexObject {
429 description: None,
430 required: Some(
431 vec![
432 ::jacquard_common::smol_str::SmolStr::new_static("status"),
433 ::jacquard_common::smol_str::SmolStr::new_static("createdAt")
434 ],
435 ),
436 nullable: None,
437 properties: {
438 #[allow(unused_mut)]
439 let mut map = ::alloc::collections::BTreeMap::new();
440 map.insert(
441 ::jacquard_common::smol_str::SmolStr::new_static(
442 "createdAt",
443 ),
444 ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
445 description: None,
446 format: Some(
447 ::jacquard_lexicon::lexicon::LexStringFormat::Datetime,
448 ),
449 default: None,
450 min_length: None,
451 max_length: None,
452 min_graphemes: None,
453 max_graphemes: None,
454 r#enum: None,
455 r#const: None,
456 known_values: None,
457 }),
458 );
459 map.insert(
460 ::jacquard_common::smol_str::SmolStr::new_static(
461 "durationMinutes",
462 ),
463 ::jacquard_lexicon::lexicon::LexObjectProperty::Integer(::jacquard_lexicon::lexicon::LexInteger {
464 description: None,
465 default: None,
466 minimum: Some(1i64),
467 maximum: None,
468 r#enum: None,
469 r#const: None,
470 }),
471 );
472 map.insert(
473 ::jacquard_common::smol_str::SmolStr::new_static("embed"),
474 ::jacquard_lexicon::lexicon::LexObjectProperty::Union(::jacquard_lexicon::lexicon::LexRefUnion {
475 description: Some(
476 ::jacquard_common::CowStr::new_static(
477 "An optional embed associated with the status.",
478 ),
479 ),
480 refs: vec![
481 ::jacquard_common::CowStr::new_static("app.bsky.embed.external")
482 ],
483 closed: None,
484 }),
485 );
486 map.insert(
487 ::jacquard_common::smol_str::SmolStr::new_static("status"),
488 ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString {
489 description: Some(
490 ::jacquard_common::CowStr::new_static(
491 "The status for the account.",
492 ),
493 ),
494 format: None,
495 default: None,
496 min_length: None,
497 max_length: None,
498 min_graphemes: None,
499 max_graphemes: None,
500 r#enum: None,
501 r#const: None,
502 known_values: None,
503 }),
504 );
505 map
506 },
507 }),
508 }),
509 );
510 map
511 },
512 }
513}