Struct smart_config::de::OrString
source · pub struct OrString<De>(pub De);
Expand description
Deserializer that supports parsing either from a default format (usually an object or array) via Deserialize
,
or from string via FromStr
.
§Examples
use anyhow::Context as _;
use smart_config::{de, testing, DescribeConfig, DeserializeConfig};
#[derive(Debug, Serialize, Deserialize)]
#[serde(transparent)]
struct MySet(HashSet<u64>);
impl FromStr for MySet {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
s.split(',')
.map(|part| part.trim().parse().context("invalid value"))
.collect::<anyhow::Result<_>>()
.map(Self)
}
}
#[derive(DescribeConfig, DeserializeConfig)]
struct TestConfig {
#[config(with = de::OrString(de::Serde![array]))]
value: MySet,
}
let sample = smart_config::config!("value": "2, 3, 2");
let config: TestConfig = testing::test(sample)?;
assert_eq!(config.value.0, HashSet::from([2, 3]));
// Parsing from array works, too
let sample = smart_config::config!("value": [2, 3, 2]);
let config: TestConfig = testing::test(sample)?;
assert_eq!(config.value.0, HashSet::from([2, 3]));
Tuple Fields§
§0: De
Trait Implementations§
source§impl<T, De> DeserializeParam<T> for OrString<De>
impl<T, De> DeserializeParam<T> for OrString<De>
source§const EXPECTING: BasicTypes = _
const EXPECTING: BasicTypes = _
Describes which parameter this deserializer is expecting.
source§fn describe(&self, description: &mut TypeDescription)
fn describe(&self, description: &mut TypeDescription)
Additional info about the deserialized type, e.g., extended description.
source§fn deserialize_param(
&self,
ctx: DeserializeContext<'_>,
param: &'static ParamMetadata,
) -> Result<T, ErrorWithOrigin>
fn deserialize_param( &self, ctx: DeserializeContext<'_>, param: &'static ParamMetadata, ) -> Result<T, ErrorWithOrigin>
Performs deserialization given the context and param metadata. Read more
Auto Trait Implementations§
impl<De> Freeze for OrString<De>where
De: Freeze,
impl<De> RefUnwindSafe for OrString<De>where
De: RefUnwindSafe,
impl<De> Send for OrString<De>where
De: Send,
impl<De> Sync for OrString<De>where
De: Sync,
impl<De> Unpin for OrString<De>where
De: Unpin,
impl<De> UnwindSafe for OrString<De>where
De: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more