// @generated by jacquard-lexicon. DO NOT EDIT. // // Lexicon: dev.sensorthings.multiObservation // // This file was automatically generated from Lexicon schemas. // Any manual changes will be overwritten on the next regeneration. #[allow(unused_imports)] use alloc::collections::BTreeMap; #[allow(unused_imports)] use core::marker::PhantomData; use jacquard_common::CowStr; #[allow(unused_imports)] use jacquard_common::deps::codegen::unicode_segmentation::UnicodeSegmentation; use jacquard_common::types::collection::{Collection, RecordError}; use jacquard_common::types::string::{AtUri, Cid, Datetime}; use jacquard_common::types::uri::{RecordUri, UriError}; use jacquard_common::types::value::Data; use jacquard_common::xrpc::XrpcResp; use jacquard_derive::{IntoStatic, lexicon, open_union}; use jacquard_lexicon::lexicon::LexiconDoc; use jacquard_lexicon::schema::LexiconSchema; #[allow(unused_imports)] use jacquard_lexicon::validation::{ConstraintError, ValidationPath}; use serde::{Serialize, Deserialize}; use crate::dev_sensorthings::datastream::UnitOfMeasurement; use crate::dev_sensorthings::multi_observation; /// A composite observation bundling multiple co-produced results from a single act of sensing. Each entry carries its own ObservedProperty, unit, and scale metadata. Use this instead of separate Observations when the results are genuinely co-produced (e.g. wave statistics from spectral processing) and have no independent existence. #[lexicon] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)] #[serde(rename_all = "camelCase")] pub struct MultiObservation<'a> { ///AT-URIs of source observations or datastreams #[serde(skip_serializing_if = "Option::is_none")] #[serde(borrow)] pub derived_from: Option>>, ///Array of co-produced result entries #[serde(borrow)] pub entries: Vec>, ///Time the phenomenon was observed. Start of interval if phenomenonTimeEnd is present. pub phenomenon_time: Datetime, ///End of observation interval. For wave statistics, this is the end of the burst window. #[serde(skip_serializing_if = "Option::is_none")] pub phenomenon_time_end: Option, ///Quality flag applying to the composite observation as a whole #[serde(skip_serializing_if = "Option::is_none")] #[serde(borrow)] pub result_quality: Option>, ///Time the results became available #[serde(skip_serializing_if = "Option::is_none")] pub result_time: Option, ///AT-URI of the dev.sensorthings.sensor record (the instrument or process that co-produced these results) #[serde(borrow)] pub sensor: AtUri<'a>, ///AT-URI of the dev.sensorthings.thing record #[serde(borrow)] pub thing: AtUri<'a>, } /// Quality flag applying to the composite observation as a whole #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum MultiObservationResultQuality<'a> { Good, Suspect, Missing, Other(CowStr<'a>), } impl<'a> MultiObservationResultQuality<'a> { pub fn as_str(&self) -> &str { match self { Self::Good => "dev.sensorthings.quality#good", Self::Suspect => "dev.sensorthings.quality#suspect", Self::Missing => "dev.sensorthings.quality#missing", Self::Other(s) => s.as_ref(), } } } impl<'a> From<&'a str> for MultiObservationResultQuality<'a> { fn from(s: &'a str) -> Self { match s { "dev.sensorthings.quality#good" => Self::Good, "dev.sensorthings.quality#suspect" => Self::Suspect, "dev.sensorthings.quality#missing" => Self::Missing, _ => Self::Other(CowStr::from(s)), } } } impl<'a> From for MultiObservationResultQuality<'a> { fn from(s: String) -> Self { match s.as_str() { "dev.sensorthings.quality#good" => Self::Good, "dev.sensorthings.quality#suspect" => Self::Suspect, "dev.sensorthings.quality#missing" => Self::Missing, _ => Self::Other(CowStr::from(s)), } } } impl<'a> core::fmt::Display for MultiObservationResultQuality<'a> { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "{}", self.as_str()) } } impl<'a> AsRef for MultiObservationResultQuality<'a> { fn as_ref(&self) -> &str { self.as_str() } } impl<'a> serde::Serialize for MultiObservationResultQuality<'a> { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer, { serializer.serialize_str(self.as_str()) } } impl<'de, 'a> serde::Deserialize<'de> for MultiObservationResultQuality<'a> where 'de: 'a, { fn deserialize(deserializer: D) -> Result where D: serde::Deserializer<'de>, { let s = <&'de str>::deserialize(deserializer)?; Ok(Self::from(s)) } } impl<'a> Default for MultiObservationResultQuality<'a> { fn default() -> Self { Self::Other(Default::default()) } } impl jacquard_common::IntoStatic for MultiObservationResultQuality<'_> { type Output = MultiObservationResultQuality<'static>; fn into_static(self) -> Self::Output { match self { MultiObservationResultQuality::Good => MultiObservationResultQuality::Good, MultiObservationResultQuality::Suspect => { MultiObservationResultQuality::Suspect } MultiObservationResultQuality::Missing => { MultiObservationResultQuality::Missing } MultiObservationResultQuality::Other(v) => { MultiObservationResultQuality::Other(v.into_static()) } } } } /// Typed wrapper for GetRecord response with this collection's record type. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)] #[serde(rename_all = "camelCase")] pub struct MultiObservationGetRecordOutput<'a> { #[serde(skip_serializing_if = "Option::is_none")] #[serde(borrow)] pub cid: Option>, #[serde(borrow)] pub uri: AtUri<'a>, #[serde(borrow)] pub value: MultiObservation<'a>, } /// A single result within a composite observation, fully self-describing. #[lexicon] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)] #[serde(rename_all = "camelCase")] pub struct MultiObservationEntry<'a> { ///AT-URI of the dev.sensorthings.observedProperty record #[serde(borrow)] pub observed_property: AtUri<'a>, #[serde(borrow)] pub result: MultiObservationEntryResult<'a>, ///Quality flag for this specific entry, if different from the composite quality #[serde(skip_serializing_if = "Option::is_none")] #[serde(borrow)] pub result_quality: Option>, ///Scale factor for this entry's numeric result. Default 0. #[serde(skip_serializing_if = "Option::is_none")] pub result_scale_factor: Option, #[serde(borrow)] pub unit_of_measurement: UnitOfMeasurement<'a>, } #[open_union] #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)] #[serde(tag = "$type")] #[serde(bound(deserialize = "'de: 'a"))] pub enum MultiObservationEntryResult<'a> {} /// Quality flag for this specific entry, if different from the composite quality #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum MultiObservationEntryResultQuality<'a> { Good, Suspect, Missing, Other(CowStr<'a>), } impl<'a> MultiObservationEntryResultQuality<'a> { pub fn as_str(&self) -> &str { match self { Self::Good => "dev.sensorthings.quality#good", Self::Suspect => "dev.sensorthings.quality#suspect", Self::Missing => "dev.sensorthings.quality#missing", Self::Other(s) => s.as_ref(), } } } impl<'a> From<&'a str> for MultiObservationEntryResultQuality<'a> { fn from(s: &'a str) -> Self { match s { "dev.sensorthings.quality#good" => Self::Good, "dev.sensorthings.quality#suspect" => Self::Suspect, "dev.sensorthings.quality#missing" => Self::Missing, _ => Self::Other(CowStr::from(s)), } } } impl<'a> From for MultiObservationEntryResultQuality<'a> { fn from(s: String) -> Self { match s.as_str() { "dev.sensorthings.quality#good" => Self::Good, "dev.sensorthings.quality#suspect" => Self::Suspect, "dev.sensorthings.quality#missing" => Self::Missing, _ => Self::Other(CowStr::from(s)), } } } impl<'a> core::fmt::Display for MultiObservationEntryResultQuality<'a> { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "{}", self.as_str()) } } impl<'a> AsRef for MultiObservationEntryResultQuality<'a> { fn as_ref(&self) -> &str { self.as_str() } } impl<'a> serde::Serialize for MultiObservationEntryResultQuality<'a> { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer, { serializer.serialize_str(self.as_str()) } } impl<'de, 'a> serde::Deserialize<'de> for MultiObservationEntryResultQuality<'a> where 'de: 'a, { fn deserialize(deserializer: D) -> Result where D: serde::Deserializer<'de>, { let s = <&'de str>::deserialize(deserializer)?; Ok(Self::from(s)) } } impl<'a> Default for MultiObservationEntryResultQuality<'a> { fn default() -> Self { Self::Other(Default::default()) } } impl jacquard_common::IntoStatic for MultiObservationEntryResultQuality<'_> { type Output = MultiObservationEntryResultQuality<'static>; fn into_static(self) -> Self::Output { match self { MultiObservationEntryResultQuality::Good => { MultiObservationEntryResultQuality::Good } MultiObservationEntryResultQuality::Suspect => { MultiObservationEntryResultQuality::Suspect } MultiObservationEntryResultQuality::Missing => { MultiObservationEntryResultQuality::Missing } MultiObservationEntryResultQuality::Other(v) => { MultiObservationEntryResultQuality::Other(v.into_static()) } } } } impl<'a> MultiObservation<'a> { pub fn uri( uri: impl Into>, ) -> Result, UriError> { RecordUri::try_from_uri(AtUri::new_cow(uri.into())?) } } /// Marker type for deserializing records from this collection. #[derive(Debug, Serialize, Deserialize)] pub struct MultiObservationRecord; impl XrpcResp for MultiObservationRecord { const NSID: &'static str = "dev.sensorthings.multiObservation"; const ENCODING: &'static str = "application/json"; type Output<'de> = MultiObservationGetRecordOutput<'de>; type Err<'de> = RecordError<'de>; } impl From> for MultiObservation<'_> { fn from(output: MultiObservationGetRecordOutput<'_>) -> Self { use jacquard_common::IntoStatic; output.value.into_static() } } impl Collection for MultiObservation<'_> { const NSID: &'static str = "dev.sensorthings.multiObservation"; type Record = MultiObservationRecord; } impl Collection for MultiObservationRecord { const NSID: &'static str = "dev.sensorthings.multiObservation"; type Record = MultiObservationRecord; } impl<'a> LexiconSchema for MultiObservation<'a> { fn nsid() -> &'static str { "dev.sensorthings.multiObservation" } fn def_name() -> &'static str { "main" } fn lexicon_doc() -> LexiconDoc<'static> { lexicon_doc_dev_sensorthings_multiObservation() } fn validate(&self) -> Result<(), ConstraintError> { if let Some(ref value) = self.derived_from { #[allow(unused_comparisons)] if value.len() > 16usize { return Err(ConstraintError::MaxLength { path: ValidationPath::from_field("derived_from"), max: 16usize, actual: value.len(), }); } } { let value = &self.entries; #[allow(unused_comparisons)] if value.len() > 32usize { return Err(ConstraintError::MaxLength { path: ValidationPath::from_field("entries"), max: 32usize, actual: value.len(), }); } } if let Some(ref value) = self.result_quality { #[allow(unused_comparisons)] if ::len(value.as_ref()) > 64usize { return Err(ConstraintError::MaxLength { path: ValidationPath::from_field("result_quality"), max: 64usize, actual: ::len(value.as_ref()), }); } } Ok(()) } } impl<'a> LexiconSchema for MultiObservationEntry<'a> { fn nsid() -> &'static str { "dev.sensorthings.multiObservation" } fn def_name() -> &'static str { "multiObservationEntry" } fn lexicon_doc() -> LexiconDoc<'static> { lexicon_doc_dev_sensorthings_multiObservation() } fn validate(&self) -> Result<(), ConstraintError> { if let Some(ref value) = self.result_quality { #[allow(unused_comparisons)] if ::len(value.as_ref()) > 64usize { return Err(ConstraintError::MaxLength { path: ValidationPath::from_field("result_quality"), max: 64usize, actual: ::len(value.as_ref()), }); } } Ok(()) } } pub mod multi_observation_state { pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; #[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 Entries; type Thing; type Sensor; type PhenomenonTime; } /// Empty state - all required fields are unset pub struct Empty(()); impl sealed::Sealed for Empty {} impl State for Empty { type Entries = Unset; type Thing = Unset; type Sensor = Unset; type PhenomenonTime = Unset; } ///State transition - sets the `entries` field to Set pub struct SetEntries(PhantomData S>); impl sealed::Sealed for SetEntries {} impl State for SetEntries { type Entries = Set; type Thing = S::Thing; type Sensor = S::Sensor; type PhenomenonTime = S::PhenomenonTime; } ///State transition - sets the `thing` field to Set pub struct SetThing(PhantomData S>); impl sealed::Sealed for SetThing {} impl State for SetThing { type Entries = S::Entries; type Thing = Set; type Sensor = S::Sensor; type PhenomenonTime = S::PhenomenonTime; } ///State transition - sets the `sensor` field to Set pub struct SetSensor(PhantomData S>); impl sealed::Sealed for SetSensor {} impl State for SetSensor { type Entries = S::Entries; type Thing = S::Thing; type Sensor = Set; type PhenomenonTime = S::PhenomenonTime; } ///State transition - sets the `phenomenon_time` field to Set pub struct SetPhenomenonTime(PhantomData S>); impl sealed::Sealed for SetPhenomenonTime {} impl State for SetPhenomenonTime { type Entries = S::Entries; type Thing = S::Thing; type Sensor = S::Sensor; type PhenomenonTime = Set; } /// Marker types for field names #[allow(non_camel_case_types)] pub mod members { ///Marker type for the `entries` field pub struct entries(()); ///Marker type for the `thing` field pub struct thing(()); ///Marker type for the `sensor` field pub struct sensor(()); ///Marker type for the `phenomenon_time` field pub struct phenomenon_time(()); } } /// Builder for constructing an instance of this type pub struct MultiObservationBuilder<'a, S: multi_observation_state::State> { _state: PhantomData S>, _fields: ( Option>>, Option>>, Option, Option, Option>, Option, Option>, Option>, ), _lifetime: PhantomData<&'a ()>, } impl<'a> MultiObservation<'a> { /// Create a new builder for this type pub fn new() -> MultiObservationBuilder<'a, multi_observation_state::Empty> { MultiObservationBuilder::new() } } impl<'a> MultiObservationBuilder<'a, multi_observation_state::Empty> { /// Create a new builder with all fields unset pub fn new() -> Self { MultiObservationBuilder { _state: PhantomData, _fields: (None, None, None, None, None, None, None, None), _lifetime: PhantomData, } } } impl<'a, S: multi_observation_state::State> MultiObservationBuilder<'a, S> { /// Set the `derivedFrom` field (optional) pub fn derived_from(mut self, value: impl Into>>>) -> Self { self._fields.0 = value.into(); self } /// Set the `derivedFrom` field to an Option value (optional) pub fn maybe_derived_from(mut self, value: Option>>) -> Self { self._fields.0 = value; self } } impl<'a, S> MultiObservationBuilder<'a, S> where S: multi_observation_state::State, S::Entries: multi_observation_state::IsUnset, { /// Set the `entries` field (required) pub fn entries( mut self, value: impl Into>>, ) -> MultiObservationBuilder<'a, multi_observation_state::SetEntries> { self._fields.1 = Option::Some(value.into()); MultiObservationBuilder { _state: PhantomData, _fields: self._fields, _lifetime: PhantomData, } } } impl<'a, S> MultiObservationBuilder<'a, S> where S: multi_observation_state::State, S::PhenomenonTime: multi_observation_state::IsUnset, { /// Set the `phenomenonTime` field (required) pub fn phenomenon_time( mut self, value: impl Into, ) -> MultiObservationBuilder<'a, multi_observation_state::SetPhenomenonTime> { self._fields.2 = Option::Some(value.into()); MultiObservationBuilder { _state: PhantomData, _fields: self._fields, _lifetime: PhantomData, } } } impl<'a, S: multi_observation_state::State> MultiObservationBuilder<'a, S> { /// Set the `phenomenonTimeEnd` field (optional) pub fn phenomenon_time_end(mut self, value: impl Into>) -> Self { self._fields.3 = value.into(); self } /// Set the `phenomenonTimeEnd` field to an Option value (optional) pub fn maybe_phenomenon_time_end(mut self, value: Option) -> Self { self._fields.3 = value; self } } impl<'a, S: multi_observation_state::State> MultiObservationBuilder<'a, S> { /// Set the `resultQuality` field (optional) pub fn result_quality( mut self, value: impl Into>>, ) -> Self { self._fields.4 = value.into(); self } /// Set the `resultQuality` field to an Option value (optional) pub fn maybe_result_quality( mut self, value: Option>, ) -> Self { self._fields.4 = value; self } } impl<'a, S: multi_observation_state::State> MultiObservationBuilder<'a, S> { /// Set the `resultTime` field (optional) pub fn result_time(mut self, value: impl Into>) -> Self { self._fields.5 = value.into(); self } /// Set the `resultTime` field to an Option value (optional) pub fn maybe_result_time(mut self, value: Option) -> Self { self._fields.5 = value; self } } impl<'a, S> MultiObservationBuilder<'a, S> where S: multi_observation_state::State, S::Sensor: multi_observation_state::IsUnset, { /// Set the `sensor` field (required) pub fn sensor( mut self, value: impl Into>, ) -> MultiObservationBuilder<'a, multi_observation_state::SetSensor> { self._fields.6 = Option::Some(value.into()); MultiObservationBuilder { _state: PhantomData, _fields: self._fields, _lifetime: PhantomData, } } } impl<'a, S> MultiObservationBuilder<'a, S> where S: multi_observation_state::State, S::Thing: multi_observation_state::IsUnset, { /// Set the `thing` field (required) pub fn thing( mut self, value: impl Into>, ) -> MultiObservationBuilder<'a, multi_observation_state::SetThing> { self._fields.7 = Option::Some(value.into()); MultiObservationBuilder { _state: PhantomData, _fields: self._fields, _lifetime: PhantomData, } } } impl<'a, S> MultiObservationBuilder<'a, S> where S: multi_observation_state::State, S::Entries: multi_observation_state::IsSet, S::Thing: multi_observation_state::IsSet, S::Sensor: multi_observation_state::IsSet, S::PhenomenonTime: multi_observation_state::IsSet, { /// Build the final struct pub fn build(self) -> MultiObservation<'a> { MultiObservation { derived_from: self._fields.0, entries: self._fields.1.unwrap(), phenomenon_time: self._fields.2.unwrap(), phenomenon_time_end: self._fields.3, result_quality: self._fields.4, result_time: self._fields.5, sensor: self._fields.6.unwrap(), thing: self._fields.7.unwrap(), extra_data: Default::default(), } } /// Build the final struct with custom extra_data pub fn build_with_data( self, extra_data: BTreeMap>, ) -> MultiObservation<'a> { MultiObservation { derived_from: self._fields.0, entries: self._fields.1.unwrap(), phenomenon_time: self._fields.2.unwrap(), phenomenon_time_end: self._fields.3, result_quality: self._fields.4, result_time: self._fields.5, sensor: self._fields.6.unwrap(), thing: self._fields.7.unwrap(), extra_data: Some(extra_data), } } } fn lexicon_doc_dev_sensorthings_multiObservation() -> LexiconDoc<'static> { #[allow(unused_imports)] use jacquard_common::{CowStr, deps::smol_str::SmolStr, types::blob::MimeType}; use jacquard_lexicon::lexicon::*; use alloc::collections::BTreeMap; LexiconDoc { lexicon: Lexicon::Lexicon1, id: CowStr::new_static("dev.sensorthings.multiObservation"), defs: { let mut map = BTreeMap::new(); map.insert( SmolStr::new_static("main"), LexUserType::Record(LexRecord { description: Some( CowStr::new_static( "A composite observation bundling multiple co-produced results from a single act of sensing. Each entry carries its own ObservedProperty, unit, and scale metadata. Use this instead of separate Observations when the results are genuinely co-produced (e.g. wave statistics from spectral processing) and have no independent existence.", ), ), key: Some(CowStr::new_static("any")), record: LexRecordRecord::Object(LexObject { required: Some( vec![ SmolStr::new_static("thing"), SmolStr::new_static("sensor"), SmolStr::new_static("phenomenonTime"), SmolStr::new_static("entries") ], ), properties: { #[allow(unused_mut)] let mut map = BTreeMap::new(); map.insert( SmolStr::new_static("derivedFrom"), LexObjectProperty::Array(LexArray { description: Some( CowStr::new_static( "AT-URIs of source observations or datastreams", ), ), items: LexArrayItem::String(LexString { format: Some(LexStringFormat::AtUri), ..Default::default() }), max_length: Some(16usize), ..Default::default() }), ); map.insert( SmolStr::new_static("entries"), LexObjectProperty::Array(LexArray { description: Some( CowStr::new_static("Array of co-produced result entries"), ), items: LexArrayItem::Ref(LexRef { r#ref: CowStr::new_static("#multiObservationEntry"), ..Default::default() }), max_length: Some(32usize), ..Default::default() }), ); map.insert( SmolStr::new_static("phenomenonTime"), LexObjectProperty::String(LexString { description: Some( CowStr::new_static( "Time the phenomenon was observed. Start of interval if phenomenonTimeEnd is present.", ), ), format: Some(LexStringFormat::Datetime), ..Default::default() }), ); map.insert( SmolStr::new_static("phenomenonTimeEnd"), LexObjectProperty::String(LexString { description: Some( CowStr::new_static( "End of observation interval. For wave statistics, this is the end of the burst window.", ), ), format: Some(LexStringFormat::Datetime), ..Default::default() }), ); map.insert( SmolStr::new_static("resultQuality"), LexObjectProperty::String(LexString { description: Some( CowStr::new_static( "Quality flag applying to the composite observation as a whole", ), ), max_length: Some(64usize), ..Default::default() }), ); map.insert( SmolStr::new_static("resultTime"), LexObjectProperty::String(LexString { description: Some( CowStr::new_static("Time the results became available"), ), format: Some(LexStringFormat::Datetime), ..Default::default() }), ); map.insert( SmolStr::new_static("sensor"), LexObjectProperty::String(LexString { description: Some( CowStr::new_static( "AT-URI of the dev.sensorthings.sensor record (the instrument or process that co-produced these results)", ), ), format: Some(LexStringFormat::AtUri), ..Default::default() }), ); map.insert( SmolStr::new_static("thing"), LexObjectProperty::String(LexString { description: Some( CowStr::new_static( "AT-URI of the dev.sensorthings.thing record", ), ), format: Some(LexStringFormat::AtUri), ..Default::default() }), ); map }, ..Default::default() }), ..Default::default() }), ); map.insert( SmolStr::new_static("multiObservationEntry"), LexUserType::Object(LexObject { description: Some( CowStr::new_static( "A single result within a composite observation, fully self-describing.", ), ), required: Some( vec![ SmolStr::new_static("observedProperty"), SmolStr::new_static("unitOfMeasurement"), SmolStr::new_static("result") ], ), properties: { #[allow(unused_mut)] let mut map = BTreeMap::new(); map.insert( SmolStr::new_static("observedProperty"), LexObjectProperty::String(LexString { description: Some( CowStr::new_static( "AT-URI of the dev.sensorthings.observedProperty record", ), ), format: Some(LexStringFormat::AtUri), ..Default::default() }), ); map.insert( SmolStr::new_static("result"), LexObjectProperty::Union(LexRefUnion { refs: vec![ CowStr::new_static("dev.sensorthings.observation#numericResult"), CowStr::new_static("dev.sensorthings.observation#categoryResult"), CowStr::new_static("dev.sensorthings.observation#booleanResult"), CowStr::new_static("dev.sensorthings.observation#arrayResult"), CowStr::new_static("dev.sensorthings.observation#geoPointResult") ], ..Default::default() }), ); map.insert( SmolStr::new_static("resultQuality"), LexObjectProperty::String(LexString { description: Some( CowStr::new_static( "Quality flag for this specific entry, if different from the composite quality", ), ), max_length: Some(64usize), ..Default::default() }), ); map.insert( SmolStr::new_static("resultScaleFactor"), LexObjectProperty::Integer(LexInteger { ..Default::default() }), ); map.insert( SmolStr::new_static("unitOfMeasurement"), LexObjectProperty::Ref(LexRef { r#ref: CowStr::new_static( "dev.sensorthings.datastream#unitOfMeasurement", ), ..Default::default() }), ); map }, ..Default::default() }), ); map }, ..Default::default() } } pub mod multi_observation_entry_state { pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; #[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 ObservedProperty; type Result; type UnitOfMeasurement; } /// Empty state - all required fields are unset pub struct Empty(()); impl sealed::Sealed for Empty {} impl State for Empty { type ObservedProperty = Unset; type Result = Unset; type UnitOfMeasurement = Unset; } ///State transition - sets the `observed_property` field to Set pub struct SetObservedProperty(PhantomData S>); impl sealed::Sealed for SetObservedProperty {} impl State for SetObservedProperty { type ObservedProperty = Set; type Result = S::Result; type UnitOfMeasurement = S::UnitOfMeasurement; } ///State transition - sets the `result` field to Set pub struct SetResult(PhantomData S>); impl sealed::Sealed for SetResult {} impl State for SetResult { type ObservedProperty = S::ObservedProperty; type Result = Set; type UnitOfMeasurement = S::UnitOfMeasurement; } ///State transition - sets the `unit_of_measurement` field to Set pub struct SetUnitOfMeasurement(PhantomData S>); impl sealed::Sealed for SetUnitOfMeasurement {} impl State for SetUnitOfMeasurement { type ObservedProperty = S::ObservedProperty; type Result = S::Result; type UnitOfMeasurement = Set; } /// Marker types for field names #[allow(non_camel_case_types)] pub mod members { ///Marker type for the `observed_property` field pub struct observed_property(()); ///Marker type for the `result` field pub struct result(()); ///Marker type for the `unit_of_measurement` field pub struct unit_of_measurement(()); } } /// Builder for constructing an instance of this type pub struct MultiObservationEntryBuilder<'a, S: multi_observation_entry_state::State> { _state: PhantomData S>, _fields: ( Option>, Option>, Option>, Option, Option>, ), _lifetime: PhantomData<&'a ()>, } impl<'a> MultiObservationEntry<'a> { /// Create a new builder for this type pub fn new() -> MultiObservationEntryBuilder< 'a, multi_observation_entry_state::Empty, > { MultiObservationEntryBuilder::new() } } impl<'a> MultiObservationEntryBuilder<'a, multi_observation_entry_state::Empty> { /// Create a new builder with all fields unset pub fn new() -> Self { MultiObservationEntryBuilder { _state: PhantomData, _fields: (None, None, None, None, None), _lifetime: PhantomData, } } } impl<'a, S> MultiObservationEntryBuilder<'a, S> where S: multi_observation_entry_state::State, S::ObservedProperty: multi_observation_entry_state::IsUnset, { /// Set the `observedProperty` field (required) pub fn observed_property( mut self, value: impl Into>, ) -> MultiObservationEntryBuilder< 'a, multi_observation_entry_state::SetObservedProperty, > { self._fields.0 = Option::Some(value.into()); MultiObservationEntryBuilder { _state: PhantomData, _fields: self._fields, _lifetime: PhantomData, } } } impl<'a, S> MultiObservationEntryBuilder<'a, S> where S: multi_observation_entry_state::State, S::Result: multi_observation_entry_state::IsUnset, { /// Set the `result` field (required) pub fn result( mut self, value: impl Into>, ) -> MultiObservationEntryBuilder<'a, multi_observation_entry_state::SetResult> { self._fields.1 = Option::Some(value.into()); MultiObservationEntryBuilder { _state: PhantomData, _fields: self._fields, _lifetime: PhantomData, } } } impl<'a, S: multi_observation_entry_state::State> MultiObservationEntryBuilder<'a, S> { /// Set the `resultQuality` field (optional) pub fn result_quality( mut self, value: impl Into>>, ) -> Self { self._fields.2 = value.into(); self } /// Set the `resultQuality` field to an Option value (optional) pub fn maybe_result_quality( mut self, value: Option>, ) -> Self { self._fields.2 = value; self } } impl<'a, S: multi_observation_entry_state::State> MultiObservationEntryBuilder<'a, S> { /// Set the `resultScaleFactor` field (optional) pub fn result_scale_factor(mut self, value: impl Into>) -> Self { self._fields.3 = value.into(); self } /// Set the `resultScaleFactor` field to an Option value (optional) pub fn maybe_result_scale_factor(mut self, value: Option) -> Self { self._fields.3 = value; self } } impl<'a, S> MultiObservationEntryBuilder<'a, S> where S: multi_observation_entry_state::State, S::UnitOfMeasurement: multi_observation_entry_state::IsUnset, { /// Set the `unitOfMeasurement` field (required) pub fn unit_of_measurement( mut self, value: impl Into>, ) -> MultiObservationEntryBuilder< 'a, multi_observation_entry_state::SetUnitOfMeasurement, > { self._fields.4 = Option::Some(value.into()); MultiObservationEntryBuilder { _state: PhantomData, _fields: self._fields, _lifetime: PhantomData, } } } impl<'a, S> MultiObservationEntryBuilder<'a, S> where S: multi_observation_entry_state::State, S::ObservedProperty: multi_observation_entry_state::IsSet, S::Result: multi_observation_entry_state::IsSet, S::UnitOfMeasurement: multi_observation_entry_state::IsSet, { /// Build the final struct pub fn build(self) -> MultiObservationEntry<'a> { MultiObservationEntry { observed_property: self._fields.0.unwrap(), result: self._fields.1.unwrap(), result_quality: self._fields.2, result_scale_factor: self._fields.3, unit_of_measurement: self._fields.4.unwrap(), extra_data: Default::default(), } } /// Build the final struct with custom extra_data pub fn build_with_data( self, extra_data: BTreeMap>, ) -> MultiObservationEntry<'a> { MultiObservationEntry { observed_property: self._fields.0.unwrap(), result: self._fields.1.unwrap(), result_quality: self._fields.2, result_scale_factor: self._fields.3, unit_of_measurement: self._fields.4.unwrap(), extra_data: Some(extra_data), } } }