yaml: add YamlLoader::load_from_parser(&Parser)
Make it easier to load documents from a prebuilt Parser.
This commit is contained in:
parent
c00b27bb95
commit
d7f7c7ce15
3 changed files with 25 additions and 10 deletions
|
@ -30,6 +30,8 @@ using that feature.
|
|||
- `YamlLoader` structs now have a `documents()` method that returns the parsed
|
||||
documents associated with a loader.
|
||||
|
||||
- `Parser::new_from_str(&str)` and `YamlLoader::load_from_parser(&Parser)` were added.
|
||||
|
||||
**Development**:
|
||||
|
||||
## v0.7.0
|
||||
|
|
|
@ -1126,17 +1126,18 @@ foo: "bar"
|
|||
--- !t!2 &2
|
||||
baz: "qux"
|
||||
"#;
|
||||
let mut loader = YamlLoader::default();
|
||||
let mut parser = Parser::new(text.chars()).keep_tags(true);
|
||||
assert!(parser.load(&mut loader, true).is_ok());
|
||||
assert_eq!(loader.documents().len(), 2);
|
||||
let yaml = &loader.documents()[0];
|
||||
let mut parser = Parser::new_from_str(text).keep_tags(true);
|
||||
let result = YamlLoader::load_from_parser(&mut parser);
|
||||
assert!(result.is_ok());
|
||||
let docs = result.unwrap();
|
||||
assert_eq!(docs.len(), 2);
|
||||
let yaml = &docs[0];
|
||||
assert_eq!(yaml["foo"].as_str(), Some("bar"));
|
||||
let yaml = &loader.documents()[1];
|
||||
let yaml = &docs[1];
|
||||
assert_eq!(yaml["baz"].as_str(), Some("qux"));
|
||||
|
||||
let mut loader = YamlLoader::default();
|
||||
let mut parser = Parser::new(text.chars()).keep_tags(false);
|
||||
assert!(parser.load(&mut loader, true).is_err());
|
||||
let mut parser = Parser::new_from_str(text).keep_tags(false);
|
||||
let result = YamlLoader::load_from_parser(&mut parser);
|
||||
assert!(result.is_err());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -234,8 +234,20 @@ impl YamlLoader {
|
|||
/// # Errors
|
||||
/// Returns `ScanError` when loading fails.
|
||||
pub fn load_from_iter<I: Iterator<Item = char>>(source: I) -> Result<Vec<Yaml>, ScanError> {
|
||||
let mut loader = YamlLoader::default();
|
||||
let mut parser = Parser::new(source);
|
||||
Self::load_from_parser(&mut parser)
|
||||
}
|
||||
|
||||
/// Load the contents from the specified Parser as a set of YAML documents.
|
||||
///
|
||||
/// Parsing succeeds if and only if all documents are parsed successfully.
|
||||
/// An error in a latter document prevents the former from being returned.
|
||||
/// # Errors
|
||||
/// Returns `ScanError` when loading fails.
|
||||
pub fn load_from_parser<I: Iterator<Item = char>>(
|
||||
parser: &mut Parser<I>,
|
||||
) -> Result<Vec<Yaml>, ScanError> {
|
||||
let mut loader = YamlLoader::default();
|
||||
parser.load(&mut loader, true)?;
|
||||
Ok(loader.docs)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue