From a7ec39ab780b53f3b73345a7eb51abc7a5b5fa3e Mon Sep 17 00:00:00 2001 From: Devon Sawatsky Date: Tue, 4 Aug 2026 16:37:36 +0000 Subject: [PATCH] improve bool and null parsing --- src/lib.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 8f0d80f..1035aa9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,9 +1,13 @@ use nom::{ - IResult, Parser, branch::alt, bytes::complete::tag, combinator::map_res, sequence::delimited, + IResult, Parser, + branch::alt, + bytes::complete::tag, + combinator::{map_res, value}, + sequence::delimited, }; use std::collections::HashMap; -#[derive(PartialEq, Debug)] +#[derive(PartialEq, Debug, Clone)] pub enum JsonValue { Object(HashMap), Array(Vec), @@ -15,16 +19,12 @@ pub enum JsonValue { } fn parse_null(input: &str) -> IResult<&str, JsonValue> { - let remaining = tag("null")(input)?.1; - Ok((remaining, JsonValue::Null)) + value(JsonValue::Null, tag("null")).parse(input) } fn parse_bool(input: &str) -> IResult<&str, JsonValue> { - let parsed = map_res(alt((tag("true"), tag("false"))), |st: &str| { - st.parse::() - }) - .parse(input)?; - - Ok((parsed.0, JsonValue::Boolean(parsed.1))) + alt((value(true, tag("true")), value(false, tag("false")))) + .map(JsonValue::Boolean) + .parse(input) } fn parse_string(input: &str) -> IResult<&str, JsonValue> { delimited(tag("\""), parse_string_inner, tag("\"")).parse(input) -- 2.51.2