teslatte/tesla_api_coverage/src/nom_help.rs

40 lines
1.1 KiB
Rust

use nom::branch::alt;
use nom::bytes::complete::{tag, take_until};
use nom::character::complete::{char, line_ending, space1};
use nom::multi::many0;
use nom::IResult;
use tracing::trace;
/// Ignore the quotes and return the inner string.
/// e.g. "unlock"
pub fn quoted_string(s: &str) -> IResult<&str, &str> {
short_trace("quoted string", s);
let (s, _) = char('"')(s)?;
let (s, string) = take_until("\"")(s)?;
let (s, _) = char('"')(s)?;
Ok((s, string))
}
pub fn ignore_whitespace(s: &str) -> IResult<&str, ()> {
short_trace("ignore whitespace", s);
let (s, ws) = many0(alt((tag("\t"), space1, line_ending)))(s)?;
short_trace("ignore whitespace afterwards", s);
Ok((s, ()))
}
pub fn until_eol(s: &str) -> IResult<&str, &str> {
short_trace("eol", s);
let (s, line) = take_until("\n")(s)?;
let (s, _) = line_ending(s)?;
short_trace("eol afterwards", s);
Ok((s, line))
}
pub fn short_trace(prefix: &str, s: &str) {
let mut max_len_left = 20;
if s.len() < max_len_left {
max_len_left = s.len();
}
trace!("{}: {:?}...", prefix, &s[0..max_len_left])
}