blob: c997fe0549b94b9eee139b91cc85ff0dff281380 [file] [log] [blame] [edit]
// Please note: This file is named "weird" keys because these things are normally not keys, not
// because your software is weird if it expects these keys in the config file.
//
// Please don't be offended!
//
use serde_derive::{Deserialize, Serialize};
use config::{File, FileFormat};
/// Helper fn to test the different deserializations
fn test_config_as<'a, T>(config: &str, format: FileFormat) -> T
where
T: serde::Deserialize<'a> + std::fmt::Debug,
{
let cfg = config::Config::builder()
.add_source(File::from_str(config, format))
.build();
assert!(cfg.is_ok(), "Config could not be built: {:?}", cfg);
let cfg = cfg.unwrap().try_deserialize();
assert!(cfg.is_ok(), "Config could not be transformed: {:?}", cfg);
let cfg: T = cfg.unwrap();
cfg
}
#[derive(Debug, Serialize, Deserialize)]
struct SettingsColon {
#[serde(rename = "foo:foo")]
foo: u8,
bar: u8,
}
#[test]
fn test_colon_key_toml() {
let config = r#"
"foo:foo" = 8
bar = 12
"#;
let cfg = test_config_as::<SettingsColon>(config, FileFormat::Toml);
assert_eq!(cfg.foo, 8);
assert_eq!(cfg.bar, 12);
}
#[test]
fn test_colon_key_json() {
let config = r#" {"foo:foo": 8, "bar": 12 } "#;
let cfg = test_config_as::<SettingsColon>(config, FileFormat::Json);
assert_eq!(cfg.foo, 8);
assert_eq!(cfg.bar, 12);
}
#[derive(Debug, Serialize, Deserialize)]
struct SettingsSlash {
#[serde(rename = "foo/foo")]
foo: u8,
bar: u8,
}
#[test]
fn test_slash_key_toml() {
let config = r#"
"foo/foo" = 8
bar = 12
"#;
let cfg = test_config_as::<SettingsSlash>(config, FileFormat::Toml);
assert_eq!(cfg.foo, 8);
assert_eq!(cfg.bar, 12);
}
#[test]
fn test_slash_key_json() {
let config = r#" {"foo/foo": 8, "bar": 12 } "#;
let cfg = test_config_as::<SettingsSlash>(config, FileFormat::Json);
assert_eq!(cfg.foo, 8);
assert_eq!(cfg.bar, 12);
}
#[derive(Debug, Serialize, Deserialize)]
struct SettingsDoubleBackslash {
#[serde(rename = "foo\\foo")]
foo: u8,
bar: u8,
}
#[test]
fn test_doublebackslash_key_toml() {
let config = r#"
"foo\\foo" = 8
bar = 12
"#;
let cfg = test_config_as::<SettingsDoubleBackslash>(config, FileFormat::Toml);
assert_eq!(cfg.foo, 8);
assert_eq!(cfg.bar, 12);
}
#[test]
fn test_doublebackslash_key_json() {
let config = r#" {"foo\\foo": 8, "bar": 12 } "#;
let cfg = test_config_as::<SettingsDoubleBackslash>(config, FileFormat::Json);
assert_eq!(cfg.foo, 8);
assert_eq!(cfg.bar, 12);
}