diff --git a/Cargo.lock b/Cargo.lock index 27691a7..fabc9ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -408,12 +408,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.7.4" @@ -425,12 +419,11 @@ dependencies = [ [[package]] name = "nom" -version = "7.1.3" +version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" dependencies = [ "memchr", - "minimal-lexical", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index cae005d..2ef6214 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ color-eyre = "0.6.5" directories = "6.0.0" env_logger = "0.11.10" log = "0.4.31" -nom = "7.1.3" +nom = "8" paste = "1.0.15" serde = "1.0.228" thiserror = "2.0.18" diff --git a/src/request.rs b/src/request.rs index 7bdd468..a6fa717 100644 --- a/src/request.rs +++ b/src/request.rs @@ -4,8 +4,8 @@ use nom::{ character::complete::{not_line_ending, space0, space1, u64}, combinator::{eof, map, map_res, opt}, error::Error as NomError, - sequence::{preceded, separated_pair, terminated, tuple}, - IResult, + sequence::{preceded, separated_pair, terminated}, + IResult, Parser, }; use paste::paste; use std::{ @@ -98,7 +98,7 @@ pub fn parse(s: &str) -> Result, Error> { } fn parse_command(s: &str) -> IResult<&str, Request<'_>> { - let (s, (cmd, _)) = tuple(( + let (s, (cmd, _)) = ( alt(( parse_set, parse_get, @@ -115,7 +115,8 @@ fn parse_command(s: &str) -> IResult<&str, Request<'_>> { map(tag("NOP"), |_| Request::Nop), )), eof, - ))(s)?; + ) + .parse(s)?; Ok((s, cmd)) } @@ -129,7 +130,7 @@ macro_rules! gen_parse_set { map_res(not_line_ending, decode), ), Set::[<$x:camel>], - )(s) + ).parse(s) } } }; @@ -150,7 +151,8 @@ fn parse_set_timeout(s: &str) -> IResult<&str, Set<'_>> { map( preceded(terminated(tag("TIMEOUT"), space1), u64), Set::Timeout, - )(s) + ) + .parse(s) } fn parse_set_repeat(s: &str) -> IResult<&str, Set<'_>> { @@ -176,7 +178,8 @@ fn parse_set_repeat(s: &str) -> IResult<&str, Set<'_>> { Set::Repeatok, ), )), - )(s) + ) + .parse(s) } fn parse_set_qualitybar(s: &str) -> IResult<&str, Set<'_>> { @@ -195,7 +198,8 @@ fn parse_set_qualitybar(s: &str) -> IResult<&str, Set<'_>> { Set::QualitybarTt, ), )), - )(s) + ) + .parse(s) } fn parse_set(s: &str) -> IResult<&str, Request<'_>> { @@ -219,14 +223,16 @@ fn parse_set(s: &str) -> IResult<&str, Request<'_>> { )), ), Request::Set, - )(s) + ) + .parse(s) } fn parse_get(s: &str) -> IResult<&str, Request<'_>> { preceded( tag("GET"), alt((map(tag("PIN"), |_| Request::GetPin), parse_get_info)), - )(s) + ) + .parse(s) } fn parse_get_info(s: &str) -> IResult<&str, Request<'_>> { @@ -238,7 +244,8 @@ fn parse_get_info(s: &str) -> IResult<&str, Request<'_>> { map(tag("ttyinfo"), |_| Request::GetInfoTtyinfo), map(tag("pid"), |_| Request::GetInfoPid), )), - )(s) + ) + .parse(s) } fn parse_confirm(s: &str) -> IResult<&str, Request<'_>> { @@ -250,23 +257,24 @@ fn parse_confirm(s: &str) -> IResult<&str, Request<'_>> { }), map(eof, |_| Request::Confirm), )), - )(s) + ) + .parse(s) } fn not_whitespace_nor_char(c: char) -> impl Fn(&str) -> IResult<&str, &str> { - move |s| take_till(|d: char| d.is_whitespace() || d == c)(s) + move |s| take_till(|d: char| d.is_whitespace() || d == c).parse(s) } fn parse_option(s: &str) -> IResult<&str, Request<'_>> { map( preceded( - tuple((tag("OPTION"), space1)), + (tag("OPTION"), space1), map( preceded( opt(tag("--")), separated_pair( map_res(not_whitespace_nor_char('='), decode), - tuple((space0, opt(tag("=")), space0)), + (space0, opt(tag("=")), space0), opt(map_res(not_line_ending, decode)), ), ), @@ -277,7 +285,8 @@ fn parse_option(s: &str) -> IResult<&str, Request<'_>> { ), ), Request::Option, - )(s) + ) + .parse(s) } #[cfg(test)]