1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
#[macro_export] macro_rules! take_while_complete ( ($input:expr, $submac:ident!( $($args:tt)* )) => ({ use nom::InputTakeAtPosition; use nom::Err; let input = $input; match input.split_at_position(|c| !$submac!(c, $($args)*)) { Err(Err::Incomplete(_)) => Ok((&input[input.len()..], input)), res => res, } }); ($input:expr, $f:expr) => ( take_while_complete!($input, call!($f)); ); ); #[macro_export] macro_rules! take_while1_complete ( ($input:expr, $submac:ident!( $($args:tt)* )) => ({ use nom::InputTakeAtPosition; use nom::Err; use nom::ErrorKind; let input = $input; match input.split_at_position1(|c| !$submac!(c, $($args)*), ErrorKind::TakeWhile1) { Err(Err::Incomplete(_)) => Ok((&input[input.len()..], input)), res => res, } }); ($input:expr, $f:expr) => ( take_while1_complete!($input, call!($f)); ); ); #[macro_export] macro_rules! empty ( ($i:expr,) => ( { use std::result::Result::*; use nom::{Err,ErrorKind}; use nom::InputLength; if ($i).input_len() == 0 { Ok(($i, $i)) } else { Err(Err::Error(error_position!($i, ErrorKind::Eof::<u32>))) } } ); ); pub mod http11; pub mod cookies; pub mod proxy_protocol;