diff --git a/src/de.rs b/src/de.rs index 7500bdec..6c2f97f4 100644 --- a/src/de.rs +++ b/src/de.rs @@ -923,20 +923,17 @@ fn parse_borrowed_str<'de>( } fn parse_null(scalar: &[u8]) -> Option<()> { - if scalar == b"~" || scalar == b"null" { - Some(()) - } else { - None + match scalar { + b"null" | b"Null" | b"NULL" | b"~" => Some(()), + _ => None, } } fn parse_bool(scalar: &str) -> Option { - if scalar == "true" { - Some(true) - } else if scalar == "false" { - Some(false) - } else { - None + match scalar { + "true" | "True" | "TRUE" => Some(true), + "false" | "False" | "FALSE" => Some(false), + _ => None, } } diff --git a/tests/test_de.rs b/tests/test_de.rs index fea81007..f52e8f0c 100644 --- a/tests/test_de.rs +++ b/tests/test_de.rs @@ -594,3 +594,69 @@ fn test_python_safe_dump() { let expected = Frob { foo: 7200 }; test_de(yaml, &expected); } + +#[test] +fn test_tag_resolution() { + // https://yaml.org/spec/1.2.2/#1032-tag-resolution + let yaml = indoc! {" + - null + - Null + - NULL + - ~ + - + - true + - True + - TRUE + - false + - False + - FALSE + - y + - Y + - yes + - Yes + - YES + - n + - N + - no + - No + - NO + - on + - On + - ON + - off + - Off + - OFF + "}; + + let expected = vec![ + Value::Null, + Value::Null, + Value::Null, + Value::Null, + Value::Null, + Value::Bool(true), + Value::Bool(true), + Value::Bool(true), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::String("y".to_owned()), + Value::String("Y".to_owned()), + Value::String("yes".to_owned()), + Value::String("Yes".to_owned()), + Value::String("YES".to_owned()), + Value::String("n".to_owned()), + Value::String("N".to_owned()), + Value::String("no".to_owned()), + Value::String("No".to_owned()), + Value::String("NO".to_owned()), + Value::String("on".to_owned()), + Value::String("On".to_owned()), + Value::String("ON".to_owned()), + Value::String("off".to_owned()), + Value::String("Off".to_owned()), + Value::String("OFF".to_owned()), + ]; + + test_de(yaml, &expected); +} diff --git a/tests/test_value.rs b/tests/test_value.rs index 261922b1..a2f4f291 100644 --- a/tests/test_value.rs +++ b/tests/test_value.rs @@ -97,7 +97,7 @@ fn test_merge() { #[test] fn test_debug() { let yaml = indoc! {" - Null: ~ + 'Null': ~ Bool: true Number: 1 String: ...