Macro peel_ip::prelude::escaped_transform
[−]
macro_rules! escaped_transform { ( __impl $ i : expr , $ normal : ident ! ( $ ( $ args : tt ) * ) , $ control_char : expr , $ transform : ident ! ( $ ( $ args2 : tt ) * ) ) => { ... }; ( __impl_1 $ i : expr , $ submac1 : ident ! ( $ ( $ args : tt ) * ) , $ control_char : expr , $ submac2 : ident ! ( $ ( $ args2 : tt ) * ) ) => { ... }; ( __impl_1 $ i : expr , $ submac1 : ident ! ( $ ( $ args : tt ) * ) , $ control_char : expr , $ g : expr ) => { ... }; ( $ i : expr , $ submac : ident ! ( $ ( $ args : tt ) * ) , $ control_char : expr , $ ( $ rest : tt ) + ) => { ... }; ( $ i : expr , $ f : expr , $ control_char : expr , $ ( $ rest : tt ) + ) => { ... }; }
escaped_transform!(&[T] -> IResult<&[T], &[T]>, T, &[T] -> IResult<&[T], &[T]>) => &[T] -> IResult<&[T], Vec<T>>
matches a byte string with escaped characters.
The first argument matches the normal characters (it must not match the control character), the second argument is the control character (like \
in most languages),
the third argument matches the escaped characters and transforms them.
As an example, the chain abc\tdef
could be abc def
(it also consumes the control character)
WARNING: if you do not use the verbose-errors
feature, this combinator will currently fail to build
because of a type inference error
fn to_s(i:Vec<u8>) -> String { String::from_utf8_lossy(&i).into_owned() } named!(transform < String >, map!( escaped_transform!(call!(alpha), '\\', alt!( tag!("\\") => { |_| &b"\\"[..] } | tag!("\"") => { |_| &b"\""[..] } | tag!("n") => { |_| &b"\n"[..] } ) ), to_s ) ); assert_eq!(transform(&b"ab\\\"cd"[..]), Done(&b""[..], String::from("ab\"cd")));