// @generated by jacquard-lexicon. DO NOT EDIT. // // Lexicon: org.passingreads.defs // // This file was automatically generated from Lexicon schemas. // Any manual changes will be overwritten on the next regeneration. //! Generated bindings for the `org.passingreads` Lexicon namespace/module. pub mod actor; pub mod book; #[allow(unused_imports)] use alloc::collections::BTreeMap; #[allow(unused_imports)] use core::marker::PhantomData; use jacquard_common::{BosStr, CowStr, DefaultStr, FromStaticStr}; #[allow(unused_imports)] use jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation; use jacquard_common::deps::smol_str::SmolStr; use jacquard_common::types::string::{Did, Handle}; use jacquard_common::types::value::Data; use jacquard_derive::IntoStatic; use jacquard_lexicon::lexicon::LexiconDoc; use jacquard_lexicon::schema::LexiconSchema; #[allow(unused_imports)] use jacquard_lexicon::validation::{ConstraintError, ValidationPath}; use serde::{Deserialize, Serialize}; /// Basic actor information for embedding in responses #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)] #[serde( rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr") )] pub struct Actor { pub did: Did, #[serde(skip_serializing_if = "Option::is_none")] pub display_name: Option, #[serde(skip_serializing_if = "Option::is_none")] pub handle: Option>, #[serde( flatten, default, deserialize_with = "deserialize_actor_extra_data", skip_serializing_if = "Option::is_none" )] pub extra_data: Option>>, } /// width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any unit. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)] #[serde( rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr") )] pub struct AspectRatio { pub height: i64, pub width: i64, #[serde( flatten, default, deserialize_with = "deserialize_aspect_ratio_extra_data", skip_serializing_if = "Option::is_none" )] pub extra_data: Option>>, } /// Book ID entry for SSG #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic, Default)] #[serde( rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr") )] pub struct BookIdEntry { pub id: S, #[serde( flatten, default, deserialize_with = "deserialize_book_id_entry_extra_data", skip_serializing_if = "Option::is_none" )] pub extra_data: Option>>, } /// Location entry with book count for SSG #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)] #[serde( rename_all = "camelCase", bound(deserialize = "S: Deserialize<'de> + BosStr") )] pub struct LocationEntry { pub book_count: i64, pub h3: S, #[serde( flatten, default, deserialize_with = "deserialize_location_entry_extra_data", skip_serializing_if = "Option::is_none" )] pub extra_data: Option>>, } impl LexiconSchema for Actor { fn nsid() -> &'static str { "org.passingreads.defs" } fn def_name() -> &'static str { "actor" } fn lexicon_doc() -> LexiconDoc<'static> { lexicon_doc_org_passingreads_defs() } fn validate(&self) -> Result<(), ConstraintError> { if let Some(ref value) = self.display_name { #[allow(unused_comparisons)] if ::len(value.as_ref()) > 640usize { return Err(ConstraintError::MaxLength { path: ValidationPath::from_field("display_name"), max: 640usize, actual: ::len(value.as_ref()), }); } } Ok(()) } } impl LexiconSchema for AspectRatio { fn nsid() -> &'static str { "org.passingreads.defs" } fn def_name() -> &'static str { "aspectRatio" } fn lexicon_doc() -> LexiconDoc<'static> { lexicon_doc_org_passingreads_defs() } fn validate(&self) -> Result<(), ConstraintError> { { let value = &self.height; if *value < 1i64 { return Err(ConstraintError::Minimum { path: ValidationPath::from_field("height"), min: 1i64, actual: *value, }); } } { let value = &self.width; if *value < 1i64 { return Err(ConstraintError::Minimum { path: ValidationPath::from_field("width"), min: 1i64, actual: *value, }); } } Ok(()) } } impl LexiconSchema for BookIdEntry { fn nsid() -> &'static str { "org.passingreads.defs" } fn def_name() -> &'static str { "bookIdEntry" } fn lexicon_doc() -> LexiconDoc<'static> { lexicon_doc_org_passingreads_defs() } fn validate(&self) -> Result<(), ConstraintError> { Ok(()) } } impl LexiconSchema for LocationEntry { fn nsid() -> &'static str { "org.passingreads.defs" } fn def_name() -> &'static str { "locationEntry" } fn lexicon_doc() -> LexiconDoc<'static> { lexicon_doc_org_passingreads_defs() } fn validate(&self) -> Result<(), ConstraintError> { Ok(()) } } fn deserialize_actor_extra_data<'de, S, D>( deserializer: D, ) -> Result>>, D::Error> where S: BosStr + serde::Deserialize<'de>, D: serde::Deserializer<'de>, { let data = >> as serde::Deserialize<'de>>::deserialize(deserializer)?; Ok(data.filter(|extra_data| !extra_data.is_empty())) } pub mod actor_state { pub use crate::builder_types::{IsSet, IsUnset, Set, Unset}; #[allow(unused)] use ::core::marker::PhantomData; mod sealed { pub trait Sealed {} } /// State trait tracking which required fields have been set pub trait State: sealed::Sealed { type Did; } /// Empty state - all required fields are unset pub struct Empty(()); impl sealed::Sealed for Empty {} impl State for Empty { type Did = Unset; } ///State transition - sets the `did` field to Set pub struct SetDid(PhantomData St>); impl sealed::Sealed for SetDid {} impl State for SetDid { type Did = Set; } /// Marker types for field names #[allow(non_camel_case_types)] pub mod members { ///Marker type for the `did` field pub struct did(()); } } /// Builder for constructing an instance of this type. pub struct ActorBuilder { _state: PhantomData St>, _fields: (Option>, Option, Option>), _type: PhantomData S>, } impl Actor { /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed pub fn new() -> ActorBuilder { ActorBuilder::new() } } impl Actor { /// Create a new builder for this type pub fn builder() -> ActorBuilder { ActorBuilder::builder() } } impl ActorBuilder { /// Create a new builder with all fields unset, using the default string type, if needed pub fn new() -> Self { ActorBuilder { _state: PhantomData, _fields: (None, None, None), _type: PhantomData, } } } impl ActorBuilder { /// Create a new builder with all fields unset pub fn builder() -> Self { ActorBuilder { _state: PhantomData, _fields: (None, None, None), _type: PhantomData, } } } impl ActorBuilder where St: actor_state::State, St::Did: actor_state::IsUnset, { /// Set the `did` field (required) pub fn did(mut self, value: impl Into>) -> ActorBuilder, S> { self._fields.0 = Option::Some(value.into()); ActorBuilder { _state: PhantomData, _fields: self._fields, _type: PhantomData, } } } impl ActorBuilder { /// Set the `displayName` field (optional) pub fn display_name(mut self, value: impl Into>) -> Self { self._fields.1 = value.into(); self } /// Set the `displayName` field to an Option value (optional) pub fn maybe_display_name(mut self, value: Option) -> Self { self._fields.1 = value; self } } impl ActorBuilder { /// Set the `handle` field (optional) pub fn handle(mut self, value: impl Into>>) -> Self { self._fields.2 = value.into(); self } /// Set the `handle` field to an Option value (optional) pub fn maybe_handle(mut self, value: Option>) -> Self { self._fields.2 = value; self } } impl ActorBuilder where St: actor_state::State, St::Did: actor_state::IsSet, { /// Build the final struct. pub fn build(self) -> Actor { Actor { did: self._fields.0.unwrap(), display_name: self._fields.1, handle: self._fields.2, extra_data: Default::default(), } } /// Build the final struct with custom extra_data. pub fn build_with_data(self, extra_data: BTreeMap>) -> Actor { Actor { did: self._fields.0.unwrap(), display_name: self._fields.1, handle: self._fields.2, extra_data: Some(extra_data), } } } fn lexicon_doc_org_passingreads_defs() -> LexiconDoc<'static> { use alloc::collections::BTreeMap; #[allow(unused_imports)] use jacquard_common::{CowStr, deps::smol_str::SmolStr, types::blob::MimeType}; use jacquard_lexicon::lexicon::*; LexiconDoc { lexicon: Lexicon::Lexicon1, id: CowStr::new_static("org.passingreads.defs"), defs: { let mut map = BTreeMap::new(); map.insert( SmolStr::new_static("actor"), LexUserType::Object(LexObject { description: Some(CowStr::new_static( "Basic actor information for embedding in responses", )), required: Some(vec![SmolStr::new_static("did")]), properties: { #[allow(unused_mut)] let mut map = BTreeMap::new(); map.insert( SmolStr::new_static("did"), LexObjectProperty::String(LexString { format: Some(LexStringFormat::Did), ..Default::default() }), ); map.insert( SmolStr::new_static("displayName"), LexObjectProperty::String(LexString { max_length: Some(640usize), ..Default::default() }), ); map.insert( SmolStr::new_static("handle"), LexObjectProperty::String(LexString { format: Some(LexStringFormat::Handle), ..Default::default() }), ); map }, ..Default::default() }), ); map.insert( SmolStr::new_static("aspectRatio"), LexUserType::Object(LexObject { description: Some( CowStr::new_static( "width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any unit.", ), ), required: Some( vec![SmolStr::new_static("width"), SmolStr::new_static("height")], ), properties: { #[allow(unused_mut)] let mut map = BTreeMap::new(); map.insert( SmolStr::new_static("height"), LexObjectProperty::Integer(LexInteger { minimum: Some(1i64), ..Default::default() }), ); map.insert( SmolStr::new_static("width"), LexObjectProperty::Integer(LexInteger { minimum: Some(1i64), ..Default::default() }), ); map }, ..Default::default() }), ); map.insert( SmolStr::new_static("bookIdEntry"), LexUserType::Object(LexObject { description: Some(CowStr::new_static("Book ID entry for SSG")), required: Some(vec![SmolStr::new_static("id")]), properties: { #[allow(unused_mut)] let mut map = BTreeMap::new(); map.insert( SmolStr::new_static("id"), LexObjectProperty::String(LexString { ..Default::default() }), ); map }, ..Default::default() }), ); map.insert( SmolStr::new_static("locationEntry"), LexUserType::Object(LexObject { description: Some(CowStr::new_static("Location entry with book count for SSG")), required: Some(vec![ SmolStr::new_static("h3"), SmolStr::new_static("bookCount"), ]), properties: { #[allow(unused_mut)] let mut map = BTreeMap::new(); map.insert( SmolStr::new_static("bookCount"), LexObjectProperty::Integer(LexInteger { ..Default::default() }), ); map.insert( SmolStr::new_static("h3"), LexObjectProperty::String(LexString { ..Default::default() }), ); map }, ..Default::default() }), ); map }, ..Default::default() } } fn deserialize_aspect_ratio_extra_data<'de, S, D>( deserializer: D, ) -> Result>>, D::Error> where S: BosStr + serde::Deserialize<'de>, D: serde::Deserializer<'de>, { let data = >> as serde::Deserialize<'de>>::deserialize(deserializer)?; Ok(data.filter(|extra_data| !extra_data.is_empty())) } pub mod aspect_ratio_state { pub use crate::builder_types::{IsSet, IsUnset, Set, Unset}; #[allow(unused)] use ::core::marker::PhantomData; mod sealed { pub trait Sealed {} } /// State trait tracking which required fields have been set pub trait State: sealed::Sealed { type Height; type Width; } /// Empty state - all required fields are unset pub struct Empty(()); impl sealed::Sealed for Empty {} impl State for Empty { type Height = Unset; type Width = Unset; } ///State transition - sets the `height` field to Set pub struct SetHeight(PhantomData St>); impl sealed::Sealed for SetHeight {} impl State for SetHeight { type Height = Set; type Width = St::Width; } ///State transition - sets the `width` field to Set pub struct SetWidth(PhantomData St>); impl sealed::Sealed for SetWidth {} impl State for SetWidth { type Height = St::Height; type Width = Set; } /// Marker types for field names #[allow(non_camel_case_types)] pub mod members { ///Marker type for the `height` field pub struct height(()); ///Marker type for the `width` field pub struct width(()); } } /// Builder for constructing an instance of this type. pub struct AspectRatioBuilder { _state: PhantomData St>, _fields: (Option, Option), _type: PhantomData S>, } impl AspectRatio { /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed pub fn new() -> AspectRatioBuilder { AspectRatioBuilder::new() } } impl AspectRatio { /// Create a new builder for this type pub fn builder() -> AspectRatioBuilder { AspectRatioBuilder::builder() } } impl AspectRatioBuilder { /// Create a new builder with all fields unset, using the default string type, if needed pub fn new() -> Self { AspectRatioBuilder { _state: PhantomData, _fields: (None, None), _type: PhantomData, } } } impl AspectRatioBuilder { /// Create a new builder with all fields unset pub fn builder() -> Self { AspectRatioBuilder { _state: PhantomData, _fields: (None, None), _type: PhantomData, } } } impl AspectRatioBuilder where St: aspect_ratio_state::State, St::Height: aspect_ratio_state::IsUnset, { /// Set the `height` field (required) pub fn height( mut self, value: impl Into, ) -> AspectRatioBuilder, S> { self._fields.0 = Option::Some(value.into()); AspectRatioBuilder { _state: PhantomData, _fields: self._fields, _type: PhantomData, } } } impl AspectRatioBuilder where St: aspect_ratio_state::State, St::Width: aspect_ratio_state::IsUnset, { /// Set the `width` field (required) pub fn width( mut self, value: impl Into, ) -> AspectRatioBuilder, S> { self._fields.1 = Option::Some(value.into()); AspectRatioBuilder { _state: PhantomData, _fields: self._fields, _type: PhantomData, } } } impl AspectRatioBuilder where St: aspect_ratio_state::State, St::Height: aspect_ratio_state::IsSet, St::Width: aspect_ratio_state::IsSet, { /// Build the final struct. pub fn build(self) -> AspectRatio { AspectRatio { height: self._fields.0.unwrap(), width: self._fields.1.unwrap(), extra_data: Default::default(), } } /// Build the final struct with custom extra_data. pub fn build_with_data(self, extra_data: BTreeMap>) -> AspectRatio { AspectRatio { height: self._fields.0.unwrap(), width: self._fields.1.unwrap(), extra_data: Some(extra_data), } } } fn deserialize_book_id_entry_extra_data<'de, S, D>( deserializer: D, ) -> Result>>, D::Error> where S: BosStr + serde::Deserialize<'de>, D: serde::Deserializer<'de>, { let data = >> as serde::Deserialize<'de>>::deserialize(deserializer)?; Ok(data.filter(|extra_data| !extra_data.is_empty())) } fn deserialize_location_entry_extra_data<'de, S, D>( deserializer: D, ) -> Result>>, D::Error> where S: BosStr + serde::Deserialize<'de>, D: serde::Deserializer<'de>, { let data = >> as serde::Deserialize<'de>>::deserialize(deserializer)?; Ok(data.filter(|extra_data| !extra_data.is_empty())) } pub mod location_entry_state { pub use crate::builder_types::{IsSet, IsUnset, Set, Unset}; #[allow(unused)] use ::core::marker::PhantomData; mod sealed { pub trait Sealed {} } /// State trait tracking which required fields have been set pub trait State: sealed::Sealed { type BookCount; type H3; } /// Empty state - all required fields are unset pub struct Empty(()); impl sealed::Sealed for Empty {} impl State for Empty { type BookCount = Unset; type H3 = Unset; } ///State transition - sets the `book_count` field to Set pub struct SetBookCount(PhantomData St>); impl sealed::Sealed for SetBookCount {} impl State for SetBookCount { type BookCount = Set; type H3 = St::H3; } ///State transition - sets the `h3` field to Set pub struct SetH3(PhantomData St>); impl sealed::Sealed for SetH3 {} impl State for SetH3 { type BookCount = St::BookCount; type H3 = Set; } /// Marker types for field names #[allow(non_camel_case_types)] pub mod members { ///Marker type for the `book_count` field pub struct book_count(()); ///Marker type for the `h3` field pub struct h3(()); } } /// Builder for constructing an instance of this type. pub struct LocationEntryBuilder { _state: PhantomData St>, _fields: (Option, Option), _type: PhantomData S>, } impl LocationEntry { /// Create a new builder for this type, using the default string type (DefaultStr = SmolStr) if needed pub fn new() -> LocationEntryBuilder { LocationEntryBuilder::new() } } impl LocationEntry { /// Create a new builder for this type pub fn builder() -> LocationEntryBuilder { LocationEntryBuilder::builder() } } impl LocationEntryBuilder { /// Create a new builder with all fields unset, using the default string type, if needed pub fn new() -> Self { LocationEntryBuilder { _state: PhantomData, _fields: (None, None), _type: PhantomData, } } } impl LocationEntryBuilder { /// Create a new builder with all fields unset pub fn builder() -> Self { LocationEntryBuilder { _state: PhantomData, _fields: (None, None), _type: PhantomData, } } } impl LocationEntryBuilder where St: location_entry_state::State, St::BookCount: location_entry_state::IsUnset, { /// Set the `bookCount` field (required) pub fn book_count( mut self, value: impl Into, ) -> LocationEntryBuilder, S> { self._fields.0 = Option::Some(value.into()); LocationEntryBuilder { _state: PhantomData, _fields: self._fields, _type: PhantomData, } } } impl LocationEntryBuilder where St: location_entry_state::State, St::H3: location_entry_state::IsUnset, { /// Set the `h3` field (required) pub fn h3( mut self, value: impl Into, ) -> LocationEntryBuilder, S> { self._fields.1 = Option::Some(value.into()); LocationEntryBuilder { _state: PhantomData, _fields: self._fields, _type: PhantomData, } } } impl LocationEntryBuilder where St: location_entry_state::State, St::BookCount: location_entry_state::IsSet, St::H3: location_entry_state::IsSet, { /// Build the final struct. pub fn build(self) -> LocationEntry { LocationEntry { book_count: self._fields.0.unwrap(), h3: self._fields.1.unwrap(), extra_data: Default::default(), } } /// Build the final struct with custom extra_data. pub fn build_with_data(self, extra_data: BTreeMap>) -> LocationEntry { LocationEntry { book_count: self._fields.0.unwrap(), h3: self._fields.1.unwrap(), extra_data: Some(extra_data), } } }