Function winnow::ascii::escaped

source ·
pub fn escaped<'a, I, Error, F, G, O1, O2>(
    normal: F,
    control_char: char,
    escapable: G,
) -> impl Parser<I, <I as Stream>::Slice, Error>
where I: StreamIsPartial + Stream + 'a, <I as Stream>::Token: AsChar + Clone, F: Parser<I, O1, Error>, G: Parser<I, O2, Error>, Error: ParserError<I>,
Expand description

Matches a byte string with escaped characters.

  • The first argument matches the normal characters (it must not accept the control character)
  • The second argument is the control character (like \ in most languages)
  • The third argument matches the escaped characters

§Example

use winnow::ascii::escaped;
use winnow::token::one_of;

fn esc(s: &str) -> IResult<&str, &str> {
  escaped(digit1, '\\', one_of(['"', 'n', '\\'])).parse_peek(s)
}

assert_eq!(esc("123;"), Ok((";", "123")));
assert_eq!(esc(r#"12\"34;"#), Ok((";", r#"12\"34"#)));
use winnow::ascii::escaped;
use winnow::token::one_of;

fn esc(s: Partial<&str>) -> IResult<Partial<&str>, &str> {
  escaped(digit1, '\\', one_of(['"', 'n', '\\'])).parse_peek(s)
}

assert_eq!(esc(Partial::new("123;")), Ok((Partial::new(";"), "123")));
assert_eq!(esc(Partial::new("12\\\"34;")), Ok((Partial::new(";"), "12\\\"34")));