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: DeTrait 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