Mercurial > lbo > hg > rcombinators
changeset 10:61a0e5bc6f6c
rustfmt
author | Lewin Bormann <lewin@lewin-bormann.info> |
---|---|
date | Sun, 02 Jun 2019 13:47:52 +0200 |
parents | 7689ce15e914 |
children | 11802adb59ae |
files | src/combinators.rs src/primitives.rs |
diffstat | 2 files changed, 33 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/combinators.rs Sun Jun 02 10:44:18 2019 +0000 +++ b/src/combinators.rs Sun Jun 02 13:47:52 2019 +0200 @@ -1,3 +1,5 @@ +use std::ops::Shr; + use crate::parser::{ParseError, ParseResult, Parser}; use crate::state::ParseState; @@ -101,11 +103,6 @@ /// Individual parsers need to have result types implementing Default. pub struct Sequence<T>(T); -macro_rules! sequence { - ($($p:expr),+) => { Sequence::new(($($p),*)) }; - ($p:expr) => { $p }; -} - impl<T> Sequence<T> { pub fn new(tuple: T) -> Sequence<T> { Sequence(tuple) @@ -264,13 +261,19 @@ impl<P: Parser> Repeat<P> { pub fn new(p: P, r: RepeatSpec) -> Repeat<P> { - Repeat { inner: p, repeat: r } + Repeat { + inner: p, + repeat: r, + } } } -impl<R, P: Parser<Result=R>> Parser for Repeat<P> { +impl<R, P: Parser<Result = R>> Parser for Repeat<P> { type Result = Vec<R>; - fn parse(&mut self, st: &mut ParseState<impl Iterator<Item=char>>) -> ParseResult<Self::Result> { + fn parse( + &mut self, + st: &mut ParseState<impl Iterator<Item = char>>, + ) -> ParseResult<Self::Result> { let (min, max) = match self.repeat { RepeatSpec::Any => (0, std::usize::MAX), RepeatSpec::Min(min) => (min as usize, std::usize::MAX), @@ -354,14 +357,19 @@ fn test_partial_sequence() { let mut p = PartialSequence::new((StringParser::new("a"), StringParser::new("c"), Int)); let mut ps = ParseState::new("acde"); - assert_eq!(Ok((Some("a".to_string()), Some("c".to_string()), None)), p.parse(&mut ps)); + assert_eq!( + Ok((Some("a".to_string()), Some("c".to_string()), None)), + p.parse(&mut ps) + ); - let mut p = PartialSequence::new( - (Sequence::new((Int, StringParser::new(" "), Int)), - StringParser::new("x"))); + let mut p = PartialSequence::new(( + Sequence::new((Int, StringParser::new(" "), Int)), + StringParser::new("x"), + )); let mut ps = ParseState::new("12 -12 nothing else"); - assert_eq!(Ok(( - Some((12, " ".to_string(), -12)), - None)), p.parse(&mut ps)); + assert_eq!( + Ok((Some((12, " ".to_string(), -12)), None)), + p.parse(&mut ps) + ); } }
--- a/src/primitives.rs Sun Jun 02 10:44:18 2019 +0000 +++ b/src/primitives.rs Sun Jun 02 13:47:52 2019 +0200 @@ -89,21 +89,25 @@ impl Parser for OneOf { type Result = char; - fn parse(&mut self, st: &mut ParseState<impl Iterator<Item = char>>) -> ParseResult<Self::Result> { + fn parse( + &mut self, + st: &mut ParseState<impl Iterator<Item = char>>, + ) -> ParseResult<Self::Result> { match st.peek() { - Some(c) if self.0.contains(&c) => { st.next(); Ok(c) }, + Some(c) if self.0.contains(&c) => { + st.next(); + Ok(c) + } _ => Err(ParseError::Fail("char not matched", st.index())), } } } /// A parser that parses a string consisting of characters `chars`. -fn string_of<S: AsRef<str>>(chars: S, rp: RepeatSpec) -> impl Parser<Result=String> { +fn string_of<S: AsRef<str>>(chars: S, rp: RepeatSpec) -> impl Parser<Result = String> { let oo = OneOf::new(chars); let rp = Repeat::new(oo, rp); - let make_string = |charvec: Vec<char>| { - Ok(String::from_iter(charvec.into_iter())) - }; + let make_string = |charvec: Vec<char>| Ok(String::from_iter(charvec.into_iter())); Transform::new(rp, make_string) }