Skip to content

Parser parses empty scalar as '~' #182

@xnuk

Description

@xnuk

yaml-rust parses empty scalar as ~:

use yaml_rust::parser::{Event, EventReceiver, Parser};

struct Printer;
impl EventReceiver for Printer {
    fn on_event(&mut self, ev: Event) {
        println!("{:?}", ev);
    }
}

let text: &str = r#"
foo:
bar: ~
"#

Parser::new(text.chars()).load(&mut Recv, false)?;

/* output:
StreamStart
DocumentStart
MappingStart(0)
Scalar("foo", Plain, 0, None)
Scalar("~", Plain, 0, None)
Scalar("bar", Plain, 0, None)
Scalar("~", Plain, 0, None)
MappingEnd
DocumentEnd
*/

while libyaml's yaml_parser_parse does not (I did FFI by myself):

StreamStart
DocumentStart
MappingStart { anchor: None }
Scalar { anchor: None, value: "foo" }
Scalar { anchor: None, value: "" }
Scalar { anchor: None, value: "bar" }
Scalar { anchor: None, value: "~" }
MappingEnd
DocumentEnd
StreamEnd

Note: tag:yaml.org,2002:null is not in Failsafe schema1 (and is in JSON schema2).

Footnotes

  1. https://yaml.org/spec/1.2.2/#101-failsafe-schema

  2. https://yaml.org/spec/1.2.2/#102-json-schema

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions