parser: add Parser::new_from_str(&str)
This commit is contained in:
parent
61b0e70a4e
commit
c00b27bb95
6 changed files with 16 additions and 8 deletions
|
@ -182,7 +182,7 @@ pub struct Parser<T> {
|
|||
/// /// Load events from a yaml string.
|
||||
/// fn str_to_events(yaml: &str) -> Vec<Event> {
|
||||
/// let mut sink = EventSink { events: Vec::new() };
|
||||
/// let mut parser = Parser::new(yaml.chars());
|
||||
/// let mut parser = Parser::new_from_str(yaml);
|
||||
/// // Load events using our sink as the receiver.
|
||||
/// parser.load(&mut sink, true).unwrap();
|
||||
/// sink.events
|
||||
|
@ -210,8 +210,16 @@ impl<R: EventReceiver> MarkedEventReceiver for R {
|
|||
/// A convenience alias for a `Result` of a parser event.
|
||||
pub type ParseResult = Result<(Event, Marker), ScanError>;
|
||||
|
||||
impl<'a> Parser<core::str::Chars<'a>> {
|
||||
/// Create a new instance of a parser from a &str.
|
||||
#[must_use]
|
||||
pub fn new_from_str(value: &'a str) -> Self {
|
||||
Parser::new(value.chars())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Iterator<Item = char>> Parser<T> {
|
||||
/// Crate a new instance of a parser from the given input of characters.
|
||||
/// Create a new instance of a parser from the given input of characters.
|
||||
pub fn new(src: T) -> Parser<T> {
|
||||
Parser {
|
||||
scanner: Scanner::new(src),
|
||||
|
@ -1099,7 +1107,7 @@ a4:
|
|||
- 2
|
||||
a5: *x
|
||||
";
|
||||
let mut p = Parser::new(s.chars());
|
||||
let mut p = Parser::new_from_str(s);
|
||||
while {
|
||||
let event_peek = p.peek().unwrap().clone();
|
||||
let event = p.next_token().unwrap();
|
||||
|
|
|
@ -49,7 +49,7 @@ impl EventReceiver for YamlChecker {
|
|||
|
||||
fn str_to_test_events(docs: &str) -> Vec<TestEvent> {
|
||||
let mut p = YamlChecker { evs: Vec::new() };
|
||||
let mut parser = Parser::new(docs.chars());
|
||||
let mut parser = Parser::new_from_str(docs);
|
||||
parser.load(&mut p, true).unwrap();
|
||||
p.evs
|
||||
}
|
||||
|
|
|
@ -123,7 +123,7 @@ fn load_tests_from_file(entry: &DirEntry) -> Result<Vec<Test<YamlTest>>> {
|
|||
|
||||
fn parse_to_events(source: &str) -> Result<Vec<String>, ScanError> {
|
||||
let mut reporter = EventReporter::new();
|
||||
Parser::new(source.chars()).load(&mut reporter, true)?;
|
||||
Parser::new_from_str(source).load(&mut reporter, true)?;
|
||||
Ok(reporter.events)
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ impl MarkedEventReceiver for EventSink {
|
|||
|
||||
fn str_to_events(yaml: &str) -> Vec<(Event, Marker)> {
|
||||
let mut sink = EventSink { events: Vec::new() };
|
||||
let mut parser = Parser::new(yaml.chars());
|
||||
let mut parser = Parser::new_from_str(yaml);
|
||||
// Load events using our sink as the receiver.
|
||||
parser.load(&mut sink, true).unwrap();
|
||||
sink.events
|
||||
|
|
|
@ -17,7 +17,7 @@ impl MarkedEventReceiver for NullSink {
|
|||
/// Parse the given input, returning elapsed time in nanoseconds.
|
||||
fn do_parse(input: &str) -> u64 {
|
||||
let mut sink = NullSink {};
|
||||
let mut parser = Parser::new(input.chars());
|
||||
let mut parser = Parser::new_from_str(input);
|
||||
let begin = std::time::Instant::now();
|
||||
parser.load(&mut sink, true).unwrap();
|
||||
let end = std::time::Instant::now();
|
||||
|
|
|
@ -21,7 +21,7 @@ fn main() {
|
|||
f.read_to_string(&mut s).unwrap();
|
||||
|
||||
let mut sink = NullSink {};
|
||||
let mut parser = Parser::new(s.chars());
|
||||
let mut parser = Parser::new_from_str(&s);
|
||||
|
||||
// Load events using our sink as the receiver.
|
||||
let begin = std::time::Instant::now();
|
||||
|
|
Loading…
Reference in a new issue