Function smart_config::testing::test_complete

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

Tests config deserialization ensuring that all declared config params are covered.

§Panics

Panics if the sample doesn’t recursively cover all params in the config. The config message will contain paths to the missing params.

§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, alias = "flag")]
    boolean: bool,
    #[config(with = SizeUnit::MiB)]
    size_mb: ByteSize,
}

let sample = smart_config::config!("flag": "false", "size_mb": 64);
let config: TestConfig = testing::test_complete(sample)?;
assert!(!config.boolean);
assert_eq!(config.size_mb, ByteSize(64 << 20));

§Panics on incomplete sample

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

let incomplete_sample = smart_config::config!("size_mb": 64);
// Will panic with a message detailing missing params (`flag` in this case)
testing::test_complete::<TestConfig>(incomplete_sample)?;