atproto blogging
at main 513 lines 18 kB view raw
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}