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