Escape string containing colon
I don't know whether this is always necessary but it is required for correctly serializing `["x: %"]`. If we serialize this without quotes to `[x: %]` then the result is not valid YAML.
This commit is contained in:
parent
a60ece819a
commit
10498b2423
2 changed files with 26 additions and 2 deletions
|
@ -301,11 +301,12 @@ fn need_quotes(string: &str) -> bool {
|
||||||
string == ""
|
string == ""
|
||||||
|| need_quotes_spaces(string)
|
|| need_quotes_spaces(string)
|
||||||
|| string.starts_with(|character: char| match character {
|
|| string.starts_with(|character: char| match character {
|
||||||
':' | '&' | '*' | '?' | '|' | '-' | '<' | '>' | '=' | '!' | '%' | '@' => true,
|
'&' | '*' | '?' | '|' | '-' | '<' | '>' | '=' | '!' | '%' | '@' => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
})
|
})
|
||||||
|| string.contains(|character: char| match character {
|
|| string.contains(|character: char| match character {
|
||||||
'{'
|
':'
|
||||||
|
| '{'
|
||||||
| '}'
|
| '}'
|
||||||
| '['
|
| '['
|
||||||
| ']'
|
| ']'
|
||||||
|
|
23
parser/tests/test_round_trip.rs
Normal file
23
parser/tests/test_round_trip.rs
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
extern crate yaml_rust;
|
||||||
|
|
||||||
|
use yaml_rust::{Yaml, YamlEmitter, YamlLoader};
|
||||||
|
|
||||||
|
fn test_round_trip(original: &Yaml) {
|
||||||
|
let mut out = String::new();
|
||||||
|
YamlEmitter::new(&mut out).dump(original).unwrap();
|
||||||
|
let documents = YamlLoader::load_from_str(&out).unwrap();
|
||||||
|
assert_eq!(documents.len(), 1);
|
||||||
|
assert_eq!(documents[0], *original);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_escape_character() {
|
||||||
|
let y = Yaml::String("\x1b".to_owned());
|
||||||
|
test_round_trip(&y);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_colon_in_string() {
|
||||||
|
let y = Yaml::String("x: %".to_owned());
|
||||||
|
test_round_trip(&y);
|
||||||
|
}
|
Loading…
Reference in a new issue