From cd2028aca70f73f6886028855f9ebfd9b4aa95e0 Mon Sep 17 00:00:00 2001 From: David Aguilar Date: Sun, 24 Mar 2024 14:51:15 -0700 Subject: [PATCH] parser: add Parser::new_from_str(&str) --- saphyr/src/parser.rs | 14 +++++++++++--- saphyr/tests/spec_test.rs | 2 +- saphyr/tests/yaml-test-suite.rs | 2 +- saphyr/tools/dump_events.rs | 2 +- saphyr/tools/run_bench.rs | 2 +- saphyr/tools/time_parse.rs | 2 +- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/saphyr/src/parser.rs b/saphyr/src/parser.rs index 0b33e58..c5855a8 100644 --- a/saphyr/src/parser.rs +++ b/saphyr/src/parser.rs @@ -182,7 +182,7 @@ pub struct Parser { /// /// Load events from a yaml string. /// fn str_to_events(yaml: &str) -> Vec { /// 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 MarkedEventReceiver for R { /// A convenience alias for a `Result` of a parser event. pub type ParseResult = Result<(Event, Marker), ScanError>; +impl<'a> Parser> { + /// 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> Parser { - /// 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 { 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(); diff --git a/saphyr/tests/spec_test.rs b/saphyr/tests/spec_test.rs index c54a2df..ecf1327 100644 --- a/saphyr/tests/spec_test.rs +++ b/saphyr/tests/spec_test.rs @@ -49,7 +49,7 @@ impl EventReceiver for YamlChecker { fn str_to_test_events(docs: &str) -> Vec { 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 } diff --git a/saphyr/tests/yaml-test-suite.rs b/saphyr/tests/yaml-test-suite.rs index e7ad10e..818083f 100644 --- a/saphyr/tests/yaml-test-suite.rs +++ b/saphyr/tests/yaml-test-suite.rs @@ -123,7 +123,7 @@ fn load_tests_from_file(entry: &DirEntry) -> Result>> { fn parse_to_events(source: &str) -> Result, 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) } diff --git a/saphyr/tools/dump_events.rs b/saphyr/tools/dump_events.rs index 8bf9e01..747e9b9 100644 --- a/saphyr/tools/dump_events.rs +++ b/saphyr/tools/dump_events.rs @@ -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 diff --git a/saphyr/tools/run_bench.rs b/saphyr/tools/run_bench.rs index cda9db2..795f7bc 100644 --- a/saphyr/tools/run_bench.rs +++ b/saphyr/tools/run_bench.rs @@ -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(); diff --git a/saphyr/tools/time_parse.rs b/saphyr/tools/time_parse.rs index 014fcfc..1555dde 100644 --- a/saphyr/tools/time_parse.rs +++ b/saphyr/tools/time_parse.rs @@ -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();