diff options
author | YounessBird <67457600+YounessBird@users.noreply.github.com> | 2022-06-01 19:15:43 +0100 |
---|---|---|
committer | YounessBird <67457600+YounessBird@users.noreply.github.com> | 2022-06-01 22:04:20 +0100 |
commit | 2b2966611b70485e184178d0c43ed340e8991593 (patch) | |
tree | 57398f49d080eae695880bf1fde89db830896776 | |
parent | c8ee9f1335fb093cda3debabe15ad0f7a3ab9071 (diff) |
fix yaml to parse int keys
-rw-r--r-- | src/file/format/yaml.rs | 9 | ||||
-rw-r--r-- | tests/file_yaml.rs | 29 | ||||
-rw-r--r-- | tests/test-keys.yaml | 8 |
3 files changed, 42 insertions, 4 deletions
diff --git a/src/file/format/yaml.rs b/src/file/format/yaml.rs index 2a76261..c9c8a22 100644 --- a/src/file/format/yaml.rs +++ b/src/file/format/yaml.rs @@ -51,10 +51,11 @@ fn from_yaml_value( yaml::Yaml::Hash(ref table) => { let mut m = Map::new(); for (key, value) in table { - if let Some(k) = key.as_str() { - m.insert(k.to_owned(), from_yaml_value(uri, value)?); - } - // TODO: should we do anything for non-string keys? + match key { + yaml::Yaml::String(k) => m.insert(k.to_owned(), from_yaml_value(uri, value)?), + yaml::Yaml::Integer(k) => m.insert(k.to_string(), from_yaml_value(uri, value)?), + _ => unreachable!(), + }; } Ok(Value::new(uri, ValueKind::Table(m))) } diff --git a/tests/file_yaml.rs b/tests/file_yaml.rs index 233b92c..0ece482 100644 --- a/tests/file_yaml.rs +++ b/tests/file_yaml.rs @@ -91,3 +91,32 @@ fn test_error_parse() { ) ); } + +use std::collections::HashMap; + +#[derive(Debug, Deserialize)] +struct Outer { + inner_string: HashMap<String, Inner>, + inner_int: HashMap<u32, Inner>, +} + +#[derive(Debug, Deserialize)] +struct Inner { + member: String, +} + +#[test] +fn test_yaml_parsing_key() { + let config = Config::builder() + .add_source(File::new("tests/test-keys.yaml", FileFormat::Yaml)) + .build() + .unwrap() + .try_deserialize::<Outer>() + .unwrap(); + assert_eq!(config.inner_int.get(&1).unwrap().member, "Test Int 1"); + assert_eq!(config.inner_int.get(&2).unwrap().member, "Test Int 2"); + assert_eq!( + config.inner_string.get("str_key").unwrap().member, + "Test String" + ); +} diff --git a/tests/test-keys.yaml b/tests/test-keys.yaml new file mode 100644 index 0000000..b026ae5 --- /dev/null +++ b/tests/test-keys.yaml @@ -0,0 +1,8 @@ +inner_int: + "1": + member: "Test Int 1" + 2: + member: "Test Int 2" +inner_string: + str_key: + member: "Test String" |