yaml: add YamlLoader::load_from_parser(&Parser)
Make it easier to load documents from a prebuilt Parser.
This commit is contained in:
parent
cd2028aca7
commit
ddb6885a17
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
|
- `YamlLoader` structs now have a `documents()` method that returns the parsed
|
||||||
documents associated with a loader.
|
documents associated with a loader.
|
||||||
|
|
||||||
|
- `Parser::new_from_str(&str)` and `YamlLoader::load_from_parser(&Parser)` were added.
|
||||||
|
|
||||||
**Development**:
|
**Development**:
|
||||||
|
|
||||||
## v0.7.0
|
## v0.7.0
|
||||||
|
|
|
@ -1126,17 +1126,18 @@ foo: "bar"
|
||||||
--- !t!2 &2
|
--- !t!2 &2
|
||||||
baz: "qux"
|
baz: "qux"
|
||||||
"#;
|
"#;
|
||||||
let mut loader = YamlLoader::default();
|
let mut parser = Parser::new_from_str(text).keep_tags(true);
|
||||||
let mut parser = Parser::new(text.chars()).keep_tags(true);
|
let result = YamlLoader::load_from_parser(&mut parser);
|
||||||
assert!(parser.load(&mut loader, true).is_ok());
|
assert!(result.is_ok());
|
||||||
assert_eq!(loader.documents().len(), 2);
|
let docs = result.unwrap();
|
||||||
let yaml = &loader.documents()[0];
|
assert_eq!(docs.len(), 2);
|
||||||
|
let yaml = &docs[0];
|
||||||
assert_eq!(yaml["foo"].as_str(), Some("bar"));
|
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"));
|
assert_eq!(yaml["baz"].as_str(), Some("qux"));
|
||||||
|
|
||||||
let mut loader = YamlLoader::default();
|
let mut parser = Parser::new_from_str(text).keep_tags(false);
|
||||||
let mut parser = Parser::new(text.chars()).keep_tags(false);
|
let result = YamlLoader::load_from_parser(&mut parser);
|
||||||
assert!(parser.load(&mut loader, true).is_err());
|
assert!(result.is_err());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,8 +234,20 @@ impl YamlLoader {
|
||||||
/// # Errors
|
/// # Errors
|
||||||
/// Returns `ScanError` when loading fails.
|
/// Returns `ScanError` when loading fails.
|
||||||
pub fn load_from_iter<I: Iterator<Item = char>>(source: I) -> Result<Vec<Yaml>, ScanError> {
|
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);
|
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)?;
|
parser.load(&mut loader, true)?;
|
||||||
Ok(loader.docs)
|
Ok(loader.docs)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue