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
51566fafce
commit
cedb185876
2 changed files with 26 additions and 2 deletions
|
@ -301,11 +301,12 @@ fn need_quotes(string: &str) -> bool {
|
|||
string == ""
|
||||
|| need_quotes_spaces(string)
|
||||
|| string.starts_with(|character: char| match character {
|
||||
':' | '&' | '*' | '?' | '|' | '-' | '<' | '>' | '=' | '!' | '%' | '@' => true,
|
||||
'&' | '*' | '?' | '|' | '-' | '<' | '>' | '=' | '!' | '%' | '@' => true,
|
||||
_ => false,
|
||||
})
|
||||
|| string.contains(|character: char| match character {
|
||||
'{'
|
||||
':'
|
||||
| '{'
|
||||
| '}'
|
||||
| '['
|
||||
| ']'
|
||||
|
|
23
saphyr/tests/test_round_trip.rs
Normal file
23
saphyr/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