Function smart_config::testing::test

source ·
pub fn test<C: DeserializeConfig>(
    sample: impl ConfigSource,
) -> Result<C, ParseErrors>
Expand description

Tests config deserialization from the provided sample. Takes into account param aliases, performs sample preprocessing etc.

§Errors

Propagates parsing errors, which allows testing negative cases.

§Examples

§Basic usage

use smart_config::{metadata::SizeUnit, testing, ByteSize};

#[derive(DescribeConfig, DeserializeConfig)]
struct TestConfig {
    #[config(default_t = true)]
    flag: bool,
    #[config(with = SizeUnit::MiB)]
    size_mb: ByteSize,
}

let sample = smart_config::config!("size_mb": 2);
let config: TestConfig = testing::test(sample)?;
assert!(config.flag);
assert_eq!(config.size_mb, ByteSize(2 << 20));

§Testing errors

#[derive(Debug, DescribeConfig, DeserializeConfig)]
struct TestConfig {
    #[config(default_t = true, alias = "flag")]
    boolean: bool,
}

let sample = smart_config::config!("flag": "no");
let err = testing::test::<TestConfig>(sample).unwrap_err();
let err = err.first();
assert_eq!(err.path(), "boolean");
assert!(err
    .inner()
    .to_string()
    .contains("provided string was not `true` or `false`"));