/rust/registry/src/index.crates.io-1949cf8c6b5b557f/nom-8.0.0/src/number/mod.rs
Line | Count | Source |
1 | | //! Parsers recognizing numbers |
2 | | |
3 | | use core::{ |
4 | | marker::PhantomData, |
5 | | ops::{Add, Shl}, |
6 | | }; |
7 | | |
8 | | use crate::{ |
9 | | branch::alt, |
10 | | character::{char, digit1}, |
11 | | combinator::{cut, map, opt, recognize}, |
12 | | error::{make_error, ErrorKind, ParseError}, |
13 | | sequence::pair, |
14 | | AsBytes, AsChar, Compare, Either, Emit, Err, Input, IsStreaming, Mode, Needed, Offset, OutputM, |
15 | | Parser, |
16 | | }; |
17 | | |
18 | | pub mod complete; |
19 | | pub mod streaming; |
20 | | |
21 | | /// Configurable endianness |
22 | | #[derive(Debug, PartialEq, Eq, Clone, Copy)] |
23 | | pub enum Endianness { |
24 | | /// Big endian |
25 | | Big, |
26 | | /// Little endian |
27 | | Little, |
28 | | /// Will match the host's endianness |
29 | | Native, |
30 | | } |
31 | | |
32 | | /// creates a big endian unsigned integer parser |
33 | | /// |
34 | | /// * `bound`: the number of bytes that will be read |
35 | | /// * `Uint`: the output type |
36 | | #[inline] |
37 | 421M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> |
38 | 421M | where |
39 | 421M | I: Input<Item = u8>, |
40 | 421M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, |
41 | | { |
42 | 421M | BeUint { |
43 | 421M | bound, |
44 | 421M | e: PhantomData, |
45 | 421M | u: PhantomData, |
46 | 421M | } |
47 | 421M | } nom::number::be_uint::<&[u8], u8, suricata::quic::error::QuicError> Line | Count | Source | 37 | 7.20M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 7.20M | where | 39 | 7.20M | I: Input<Item = u8>, | 40 | 7.20M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 7.20M | BeUint { | 43 | 7.20M | bound, | 44 | 7.20M | e: PhantomData, | 45 | 7.20M | u: PhantomData, | 46 | 7.20M | } | 47 | 7.20M | } |
nom::number::be_uint::<&[u8], u32, suricata::quic::error::QuicError> Line | Count | Source | 37 | 1.30M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 1.30M | where | 39 | 1.30M | I: Input<Item = u8>, | 40 | 1.30M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 1.30M | BeUint { | 43 | 1.30M | bound, | 44 | 1.30M | e: PhantomData, | 45 | 1.30M | u: PhantomData, | 46 | 1.30M | } | 47 | 1.30M | } |
nom::number::be_uint::<&[u8], u16, suricata::quic::error::QuicError> Line | Count | Source | 37 | 15.8k | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 15.8k | where | 39 | 15.8k | I: Input<Item = u8>, | 40 | 15.8k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 15.8k | BeUint { | 43 | 15.8k | bound, | 44 | 15.8k | e: PhantomData, | 45 | 15.8k | u: PhantomData, | 46 | 15.8k | } | 47 | 15.8k | } |
nom::number::be_uint::<&[u8], u8, suricata::pgsql::parser::PgsqlParseError<&[u8]>> Line | Count | Source | 37 | 15.7M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 15.7M | where | 39 | 15.7M | I: Input<Item = u8>, | 40 | 15.7M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 15.7M | BeUint { | 43 | 15.7M | bound, | 44 | 15.7M | e: PhantomData, | 45 | 15.7M | u: PhantomData, | 46 | 15.7M | } | 47 | 15.7M | } |
nom::number::be_uint::<&[u8], u8, suricata::rdp::error::RdpError> Line | Count | Source | 37 | 9.08M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 9.08M | where | 39 | 9.08M | I: Input<Item = u8>, | 40 | 9.08M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 9.08M | BeUint { | 43 | 9.08M | bound, | 44 | 9.08M | e: PhantomData, | 45 | 9.08M | u: PhantomData, | 46 | 9.08M | } | 47 | 9.08M | } |
nom::number::be_uint::<&[u8], u32, suricata::pgsql::parser::PgsqlParseError<&[u8]>> Line | Count | Source | 37 | 911k | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 911k | where | 39 | 911k | I: Input<Item = u8>, | 40 | 911k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 911k | BeUint { | 43 | 911k | bound, | 44 | 911k | e: PhantomData, | 45 | 911k | u: PhantomData, | 46 | 911k | } | 47 | 911k | } |
nom::number::be_uint::<&[u8], u16, suricata::pgsql::parser::PgsqlParseError<&[u8]>> Line | Count | Source | 37 | 2.01M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 2.01M | where | 39 | 2.01M | I: Input<Item = u8>, | 40 | 2.01M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 2.01M | BeUint { | 43 | 2.01M | bound, | 44 | 2.01M | e: PhantomData, | 45 | 2.01M | u: PhantomData, | 46 | 2.01M | } | 47 | 2.01M | } |
nom::number::be_uint::<&[u8], u16, suricata::rdp::error::RdpError> Line | Count | Source | 37 | 5.45M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 5.45M | where | 39 | 5.45M | I: Input<Item = u8>, | 40 | 5.45M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 5.45M | BeUint { | 43 | 5.45M | bound, | 44 | 5.45M | e: PhantomData, | 45 | 5.45M | u: PhantomData, | 46 | 5.45M | } | 47 | 5.45M | } |
nom::number::be_uint::<&[u8], u16, suricata::smb::error::SmbError> Line | Count | Source | 37 | 22.4k | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 22.4k | where | 39 | 22.4k | I: Input<Item = u8>, | 40 | 22.4k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 22.4k | BeUint { | 43 | 22.4k | bound, | 44 | 22.4k | e: PhantomData, | 45 | 22.4k | u: PhantomData, | 46 | 22.4k | } | 47 | 22.4k | } |
nom::number::be_uint::<&[u8], u64, nom::error::Error<&[u8]>> Line | Count | Source | 37 | 616k | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 616k | where | 39 | 616k | I: Input<Item = u8>, | 40 | 616k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 616k | BeUint { | 43 | 616k | bound, | 44 | 616k | e: PhantomData, | 45 | 616k | u: PhantomData, | 46 | 616k | } | 47 | 616k | } |
nom::number::be_uint::<&[u8], u8, nom::error::Error<&[u8]>> Line | Count | Source | 37 | 184M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 184M | where | 39 | 184M | I: Input<Item = u8>, | 40 | 184M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 184M | BeUint { | 43 | 184M | bound, | 44 | 184M | e: PhantomData, | 45 | 184M | u: PhantomData, | 46 | 184M | } | 47 | 184M | } |
nom::number::be_uint::<&[u8], u32, nom::error::Error<&[u8]>> Line | Count | Source | 37 | 19.7M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 19.7M | where | 39 | 19.7M | I: Input<Item = u8>, | 40 | 19.7M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 19.7M | BeUint { | 43 | 19.7M | bound, | 44 | 19.7M | e: PhantomData, | 45 | 19.7M | u: PhantomData, | 46 | 19.7M | } | 47 | 19.7M | } |
nom::number::be_uint::<&[u8], u16, nom::error::Error<&[u8]>> Line | Count | Source | 37 | 158M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 158M | where | 39 | 158M | I: Input<Item = u8>, | 40 | 158M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 158M | BeUint { | 43 | 158M | bound, | 44 | 158M | e: PhantomData, | 45 | 158M | u: PhantomData, | 46 | 158M | } | 47 | 158M | } |
nom::number::be_uint::<&[u8], u8, nom::error::Error<&[u8]>> Line | Count | Source | 37 | 16.4M | fn be_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 38 | 16.4M | where | 39 | 16.4M | I: Input<Item = u8>, | 40 | 16.4M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 41 | | { | 42 | 16.4M | BeUint { | 43 | 16.4M | bound, | 44 | 16.4M | e: PhantomData, | 45 | 16.4M | u: PhantomData, | 46 | 16.4M | } | 47 | 16.4M | } |
Unexecuted instantiation: nom::number::be_uint::<_, _, _> |
48 | | |
49 | | /// Big endian unsigned integer parser |
50 | | struct BeUint<Uint, E> { |
51 | | bound: usize, |
52 | | e: PhantomData<E>, |
53 | | u: PhantomData<Uint>, |
54 | | } |
55 | | |
56 | | impl<I, Uint, E: ParseError<I>> Parser<I> for BeUint<Uint, E> |
57 | | where |
58 | | I: Input<Item = u8>, |
59 | | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, |
60 | | { |
61 | | type Output = Uint; |
62 | | type Error = E; |
63 | | |
64 | | #[inline(always)] |
65 | 421M | fn process<OM: crate::OutputMode>( |
66 | 421M | &mut self, |
67 | 421M | input: I, |
68 | 421M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { |
69 | 421M | if input.input_len() < self.bound { |
70 | 5.23M | if OM::Incomplete::is_streaming() { |
71 | 3.65M | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) |
72 | | } else { |
73 | 1.58M | Err(Err::Error(OM::Error::bind(|| { |
74 | 1.58M | make_error(input, ErrorKind::Eof) |
75 | 1.58M | }))) <nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 73 | 606 | Err(Err::Error(OM::Error::bind(|| { | 74 | 606 | make_error(input, ErrorKind::Eof) | 75 | 606 | }))) |
<nom::number::BeUint<u8, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 73 | 1.08M | Err(Err::Error(OM::Error::bind(|| { | 74 | 1.08M | make_error(input, ErrorKind::Eof) | 75 | 1.08M | }))) |
<nom::number::BeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 73 | 7.29k | Err(Err::Error(OM::Error::bind(|| { | 74 | 7.29k | make_error(input, ErrorKind::Eof) | 75 | 7.29k | }))) |
<nom::number::BeUint<u32, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 73 | 11.2k | Err(Err::Error(OM::Error::bind(|| { | 74 | 11.2k | make_error(input, ErrorKind::Eof) | 75 | 11.2k | }))) |
<nom::number::BeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 73 | 16.8k | Err(Err::Error(OM::Error::bind(|| { | 74 | 16.8k | make_error(input, ErrorKind::Eof) | 75 | 16.8k | }))) |
<nom::number::BeUint<u16, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 73 | 7 | Err(Err::Error(OM::Error::bind(|| { | 74 | 7 | make_error(input, ErrorKind::Eof) | 75 | 7 | }))) |
Unexecuted instantiation: <nom::number::BeUint<u8, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u8, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u32, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u16, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u16, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u16, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::BeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}<nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 73 | 464k | Err(Err::Error(OM::Error::bind(|| { | 74 | 464k | make_error(input, ErrorKind::Eof) | 75 | 464k | }))) |
Unexecuted instantiation: <nom::number::BeUint<_, _> as nom::internal::Parser<_>>::process::<_>::{closure#0} |
76 | | } |
77 | | } else { |
78 | 416M | let res = OM::Output::bind(|| { |
79 | 416M | let mut res = Uint::default(); |
80 | | |
81 | | // special case to avoid shift a byte with overflow |
82 | 416M | if self.bound > 1 { |
83 | 416M | for byte in input.iter_elements().take(self.bound) { |
84 | 416M | res = (res << 8) + byte.into(); |
85 | 416M | } |
86 | | } else { |
87 | 230M | for byte in input.iter_elements().take(self.bound) { |
88 | 230M | res = byte.into(); |
89 | 230M | } |
90 | | } |
91 | | |
92 | 416M | res |
93 | 416M | }); <nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 78 | 4.22k | let res = OM::Output::bind(|| { | 79 | 4.22k | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 4.22k | if self.bound > 1 { | 83 | 0 | for byte in input.iter_elements().take(self.bound) { | 84 | 0 | res = (res << 8) + byte.into(); | 85 | 0 | } | 86 | | } else { | 87 | 4.22k | for byte in input.iter_elements().take(self.bound) { | 88 | 4.22k | res = byte.into(); | 89 | 4.22k | } | 90 | | } | 91 | | | 92 | 4.22k | res | 93 | 4.22k | }); |
<nom::number::BeUint<u8, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 78 | 6.12M | let res = OM::Output::bind(|| { | 79 | 6.12M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 6.12M | if self.bound > 1 { | 83 | 0 | for byte in input.iter_elements().take(self.bound) { | 84 | 0 | res = (res << 8) + byte.into(); | 85 | 0 | } | 86 | | } else { | 87 | 6.12M | for byte in input.iter_elements().take(self.bound) { | 88 | 6.12M | res = byte.into(); | 89 | 6.12M | } | 90 | | } | 91 | | | 92 | 6.12M | res | 93 | 6.12M | }); |
<nom::number::BeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 78 | 1.00M | let res = OM::Output::bind(|| { | 79 | 1.00M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 1.00M | if self.bound > 1 { | 83 | 4.01M | for byte in input.iter_elements().take(self.bound) { | 84 | 4.01M | res = (res << 8) + byte.into(); | 85 | 4.01M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 1.00M | res | 93 | 1.00M | }); |
<nom::number::BeUint<u32, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 78 | 1.29M | let res = OM::Output::bind(|| { | 79 | 1.29M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 1.29M | if self.bound > 1 { | 83 | 5.15M | for byte in input.iter_elements().take(self.bound) { | 84 | 5.15M | res = (res << 8) + byte.into(); | 85 | 5.15M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 1.29M | res | 93 | 1.29M | }); |
<nom::number::BeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 78 | 2.95M | let res = OM::Output::bind(|| { | 79 | 2.95M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 2.95M | if self.bound > 1 { | 83 | 5.91M | for byte in input.iter_elements().take(self.bound) { | 84 | 5.91M | res = (res << 8) + byte.into(); | 85 | 5.91M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 2.95M | res | 93 | 2.95M | }); |
<nom::number::BeUint<u16, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 78 | 15.8k | let res = OM::Output::bind(|| { | 79 | 15.8k | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 15.8k | if self.bound > 1 { | 83 | 31.6k | for byte in input.iter_elements().take(self.bound) { | 84 | 31.6k | res = (res << 8) + byte.into(); | 85 | 31.6k | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 15.8k | res | 93 | 15.8k | }); |
<nom::number::BeUint<u8, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 15.7M | let res = OM::Output::bind(|| { | 79 | 15.7M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 15.7M | if self.bound > 1 { | 83 | 0 | for byte in input.iter_elements().take(self.bound) { | 84 | 0 | res = (res << 8) + byte.into(); | 85 | 0 | } | 86 | | } else { | 87 | 15.7M | for byte in input.iter_elements().take(self.bound) { | 88 | 15.7M | res = byte.into(); | 89 | 15.7M | } | 90 | | } | 91 | | | 92 | 15.7M | res | 93 | 15.7M | }); |
<nom::number::BeUint<u8, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 9.08M | let res = OM::Output::bind(|| { | 79 | 9.08M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 9.08M | if self.bound > 1 { | 83 | 0 | for byte in input.iter_elements().take(self.bound) { | 84 | 0 | res = (res << 8) + byte.into(); | 85 | 0 | } | 86 | | } else { | 87 | 9.08M | for byte in input.iter_elements().take(self.bound) { | 88 | 9.08M | res = byte.into(); | 89 | 9.08M | } | 90 | | } | 91 | | | 92 | 9.08M | res | 93 | 9.08M | }); |
<nom::number::BeUint<u32, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 905k | let res = OM::Output::bind(|| { | 79 | 905k | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 905k | if self.bound > 1 { | 83 | 3.62M | for byte in input.iter_elements().take(self.bound) { | 84 | 3.62M | res = (res << 8) + byte.into(); | 85 | 3.62M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 905k | res | 93 | 905k | }); |
<nom::number::BeUint<u16, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 1.94M | let res = OM::Output::bind(|| { | 79 | 1.94M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 1.94M | if self.bound > 1 { | 83 | 3.89M | for byte in input.iter_elements().take(self.bound) { | 84 | 3.89M | res = (res << 8) + byte.into(); | 85 | 3.89M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 1.94M | res | 93 | 1.94M | }); |
<nom::number::BeUint<u16, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 5.45M | let res = OM::Output::bind(|| { | 79 | 5.45M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 5.45M | if self.bound > 1 { | 83 | 10.9M | for byte in input.iter_elements().take(self.bound) { | 84 | 10.9M | res = (res << 8) + byte.into(); | 85 | 10.9M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 5.45M | res | 93 | 5.45M | }); |
<nom::number::BeUint<u16, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 19.4k | let res = OM::Output::bind(|| { | 79 | 19.4k | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 19.4k | if self.bound > 1 { | 83 | 38.9k | for byte in input.iter_elements().take(self.bound) { | 84 | 38.9k | res = (res << 8) + byte.into(); | 85 | 38.9k | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 19.4k | res | 93 | 19.4k | }); |
<nom::number::BeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 614k | let res = OM::Output::bind(|| { | 79 | 614k | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 614k | if self.bound > 1 { | 83 | 4.91M | for byte in input.iter_elements().take(self.bound) { | 84 | 4.91M | res = (res << 8) + byte.into(); | 85 | 4.91M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 614k | res | 93 | 614k | }); |
<nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 183M | let res = OM::Output::bind(|| { | 79 | 183M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 183M | if self.bound > 1 { | 83 | 0 | for byte in input.iter_elements().take(self.bound) { | 84 | 0 | res = (res << 8) + byte.into(); | 85 | 0 | } | 86 | | } else { | 87 | 183M | for byte in input.iter_elements().take(self.bound) { | 88 | 183M | res = byte.into(); | 89 | 183M | } | 90 | | } | 91 | | | 92 | 183M | res | 93 | 183M | }); |
<nom::number::BeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 17.4M | let res = OM::Output::bind(|| { | 79 | 17.4M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 17.4M | if self.bound > 1 { | 83 | 69.7M | for byte in input.iter_elements().take(self.bound) { | 84 | 69.7M | res = (res << 8) + byte.into(); | 85 | 69.7M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 17.4M | res | 93 | 17.4M | }); |
<nom::number::BeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 78 | 153M | let res = OM::Output::bind(|| { | 79 | 153M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 153M | if self.bound > 1 { | 83 | 307M | for byte in input.iter_elements().take(self.bound) { | 84 | 307M | res = (res << 8) + byte.into(); | 85 | 307M | } | 86 | | } else { | 87 | 0 | for byte in input.iter_elements().take(self.bound) { | 88 | 0 | res = byte.into(); | 89 | 0 | } | 90 | | } | 91 | | | 92 | 153M | res | 93 | 153M | }); |
<nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 78 | 16.0M | let res = OM::Output::bind(|| { | 79 | 16.0M | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | 16.0M | if self.bound > 1 { | 83 | 0 | for byte in input.iter_elements().take(self.bound) { | 84 | 0 | res = (res << 8) + byte.into(); | 85 | 0 | } | 86 | | } else { | 87 | 16.0M | for byte in input.iter_elements().take(self.bound) { | 88 | 16.0M | res = byte.into(); | 89 | 16.0M | } | 90 | | } | 91 | | | 92 | 16.0M | res | 93 | 16.0M | }); |
Unexecuted instantiation: <nom::number::BeUint<_, _> as nom::internal::Parser<_>>::process::<_>::{closure#1} |
94 | | |
95 | 416M | Ok((input.take_from(self.bound), res)) |
96 | | } |
97 | 421M | } <nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 65 | 4.82k | fn process<OM: crate::OutputMode>( | 66 | 4.82k | &mut self, | 67 | 4.82k | input: I, | 68 | 4.82k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 4.82k | if input.input_len() < self.bound { | 70 | 606 | if OM::Incomplete::is_streaming() { | 71 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 606 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 4.22k | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 4.22k | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 4.82k | } |
<nom::number::BeUint<u8, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 65 | 7.20M | fn process<OM: crate::OutputMode>( | 66 | 7.20M | &mut self, | 67 | 7.20M | input: I, | 68 | 7.20M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 7.20M | if input.input_len() < self.bound { | 70 | 1.08M | if OM::Incomplete::is_streaming() { | 71 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 1.08M | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 6.12M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 6.12M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 7.20M | } |
<nom::number::BeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 65 | 1.01M | fn process<OM: crate::OutputMode>( | 66 | 1.01M | &mut self, | 67 | 1.01M | input: I, | 68 | 1.01M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 1.01M | if input.input_len() < self.bound { | 70 | 7.29k | if OM::Incomplete::is_streaming() { | 71 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 7.29k | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 1.00M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 1.00M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 1.01M | } |
<nom::number::BeUint<u32, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 65 | 1.30M | fn process<OM: crate::OutputMode>( | 66 | 1.30M | &mut self, | 67 | 1.30M | input: I, | 68 | 1.30M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 1.30M | if input.input_len() < self.bound { | 70 | 11.2k | if OM::Incomplete::is_streaming() { | 71 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 11.2k | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 1.29M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 1.29M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 1.30M | } |
<nom::number::BeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 65 | 2.97M | fn process<OM: crate::OutputMode>( | 66 | 2.97M | &mut self, | 67 | 2.97M | input: I, | 68 | 2.97M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 2.97M | if input.input_len() < self.bound { | 70 | 16.8k | if OM::Incomplete::is_streaming() { | 71 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 16.8k | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 2.95M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 2.95M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 2.97M | } |
<nom::number::BeUint<u16, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 65 | 15.8k | fn process<OM: crate::OutputMode>( | 66 | 15.8k | &mut self, | 67 | 15.8k | input: I, | 68 | 15.8k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 15.8k | if input.input_len() < self.bound { | 70 | 7 | if OM::Incomplete::is_streaming() { | 71 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 7 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 15.8k | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 15.8k | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 15.8k | } |
<nom::number::BeUint<u8, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 15.7M | fn process<OM: crate::OutputMode>( | 66 | 15.7M | &mut self, | 67 | 15.7M | input: I, | 68 | 15.7M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 15.7M | if input.input_len() < self.bound { | 70 | 29.5k | if OM::Incomplete::is_streaming() { | 71 | 29.5k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 15.7M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 15.7M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 15.7M | } |
<nom::number::BeUint<u8, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 9.08M | fn process<OM: crate::OutputMode>( | 66 | 9.08M | &mut self, | 67 | 9.08M | input: I, | 68 | 9.08M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 9.08M | if input.input_len() < self.bound { | 70 | 7.11k | if OM::Incomplete::is_streaming() { | 71 | 7.11k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 9.08M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 9.08M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 9.08M | } |
<nom::number::BeUint<u32, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 911k | fn process<OM: crate::OutputMode>( | 66 | 911k | &mut self, | 67 | 911k | input: I, | 68 | 911k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 911k | if input.input_len() < self.bound { | 70 | 6.35k | if OM::Incomplete::is_streaming() { | 71 | 6.35k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 905k | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 905k | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 911k | } |
<nom::number::BeUint<u16, suricata::pgsql::parser::PgsqlParseError<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 2.01M | fn process<OM: crate::OutputMode>( | 66 | 2.01M | &mut self, | 67 | 2.01M | input: I, | 68 | 2.01M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 2.01M | if input.input_len() < self.bound { | 70 | 67.7k | if OM::Incomplete::is_streaming() { | 71 | 67.7k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 1.94M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 1.94M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 2.01M | } |
<nom::number::BeUint<u16, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 5.45M | fn process<OM: crate::OutputMode>( | 66 | 5.45M | &mut self, | 67 | 5.45M | input: I, | 68 | 5.45M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 5.45M | if input.input_len() < self.bound { | 70 | 2.14k | if OM::Incomplete::is_streaming() { | 71 | 2.14k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 5.45M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 5.45M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 5.45M | } |
<nom::number::BeUint<u16, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 22.4k | fn process<OM: crate::OutputMode>( | 66 | 22.4k | &mut self, | 67 | 22.4k | input: I, | 68 | 22.4k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 22.4k | if input.input_len() < self.bound { | 70 | 2.94k | if OM::Incomplete::is_streaming() { | 71 | 2.94k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 19.4k | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 19.4k | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 22.4k | } |
<nom::number::BeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 616k | fn process<OM: crate::OutputMode>( | 66 | 616k | &mut self, | 67 | 616k | input: I, | 68 | 616k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 616k | if input.input_len() < self.bound { | 70 | 1.40k | if OM::Incomplete::is_streaming() { | 71 | 1.40k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 614k | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 614k | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 616k | } |
<nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 184M | fn process<OM: crate::OutputMode>( | 66 | 184M | &mut self, | 67 | 184M | input: I, | 68 | 184M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 184M | if input.input_len() < self.bound { | 70 | 433k | if OM::Incomplete::is_streaming() { | 71 | 433k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 183M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 183M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 184M | } |
<nom::number::BeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 18.7M | fn process<OM: crate::OutputMode>( | 66 | 18.7M | &mut self, | 67 | 18.7M | input: I, | 68 | 18.7M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 18.7M | if input.input_len() < self.bound { | 70 | 1.27M | if OM::Incomplete::is_streaming() { | 71 | 1.27M | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 17.4M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 17.4M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 18.7M | } |
<nom::number::BeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 65 | 155M | fn process<OM: crate::OutputMode>( | 66 | 155M | &mut self, | 67 | 155M | input: I, | 68 | 155M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 155M | if input.input_len() < self.bound { | 70 | 1.82M | if OM::Incomplete::is_streaming() { | 71 | 1.82M | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 0 | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 153M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 153M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 155M | } |
<nom::number::BeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 65 | 16.4M | fn process<OM: crate::OutputMode>( | 66 | 16.4M | &mut self, | 67 | 16.4M | input: I, | 68 | 16.4M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 69 | 16.4M | if input.input_len() < self.bound { | 70 | 464k | if OM::Incomplete::is_streaming() { | 71 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 72 | | } else { | 73 | 464k | Err(Err::Error(OM::Error::bind(|| { | 74 | | make_error(input, ErrorKind::Eof) | 75 | | }))) | 76 | | } | 77 | | } else { | 78 | 16.0M | let res = OM::Output::bind(|| { | 79 | | let mut res = Uint::default(); | 80 | | | 81 | | // special case to avoid shift a byte with overflow | 82 | | if self.bound > 1 { | 83 | | for byte in input.iter_elements().take(self.bound) { | 84 | | res = (res << 8) + byte.into(); | 85 | | } | 86 | | } else { | 87 | | for byte in input.iter_elements().take(self.bound) { | 88 | | res = byte.into(); | 89 | | } | 90 | | } | 91 | | | 92 | | res | 93 | | }); | 94 | | | 95 | 16.0M | Ok((input.take_from(self.bound), res)) | 96 | | } | 97 | 16.4M | } |
Unexecuted instantiation: <nom::number::BeUint<_, _> as nom::internal::Parser<_>>::process::<_> |
98 | | } |
99 | | |
100 | | /// Recognizes an unsigned 1 byte integer. |
101 | | /// |
102 | | /// ```rust |
103 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
104 | | /// use nom::number::be_u8; |
105 | | /// |
106 | | /// let parser = |s| { |
107 | | /// be_u8::<_, (_, ErrorKind)>().parse(s) |
108 | | /// }; |
109 | | /// |
110 | | /// assert_eq!(parser(&b"\x00\x01abcd"[..]), Ok((&b"\x01abcd"[..], 0x00))); |
111 | | /// assert_eq!(parser(&b""[..]), Err(Err::Incomplete(Needed::new(1)))); |
112 | | /// ``` |
113 | | #[inline] |
114 | 0 | pub fn be_u8<I, E: ParseError<I>>() -> impl Parser<I, Output = u8, Error = E> |
115 | 0 | where |
116 | 0 | I: Input<Item = u8>, |
117 | | { |
118 | 0 | be_uint(1) |
119 | 0 | } |
120 | | |
121 | | /// Recognizes a big endian unsigned 2 bytes integer. |
122 | | /// |
123 | | /// ```rust |
124 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
125 | | /// use nom::number::be_u16; |
126 | | /// |
127 | | /// let parser = |s| { |
128 | | /// be_u16::<_, (_, ErrorKind)>().parse(s) |
129 | | /// }; |
130 | | /// |
131 | | /// assert_eq!(parser(&b"\x00\x01abcd"[..]), Ok((&b"abcd"[..], 0x0001))); |
132 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(1)))); |
133 | | /// ``` |
134 | | #[inline] |
135 | 2.16M | pub fn be_u16<I, E: ParseError<I>>() -> impl Parser<I, Output = u16, Error = E> |
136 | 2.16M | where |
137 | 2.16M | I: Input<Item = u8>, |
138 | | { |
139 | 2.16M | be_uint(2) |
140 | 2.16M | } nom::number::be_u16::<&[u8], suricata::smb::error::SmbError> Line | Count | Source | 135 | 22.4k | pub fn be_u16<I, E: ParseError<I>>() -> impl Parser<I, Output = u16, Error = E> | 136 | 22.4k | where | 137 | 22.4k | I: Input<Item = u8>, | 138 | | { | 139 | 22.4k | be_uint(2) | 140 | 22.4k | } |
nom::number::be_u16::<&[u8], nom::error::Error<&[u8]>> Line | Count | Source | 135 | 2.14M | pub fn be_u16<I, E: ParseError<I>>() -> impl Parser<I, Output = u16, Error = E> | 136 | 2.14M | where | 137 | 2.14M | I: Input<Item = u8>, | 138 | | { | 139 | 2.14M | be_uint(2) | 140 | 2.14M | } |
Unexecuted instantiation: nom::number::be_u16::<_, _> |
141 | | |
142 | | /// Recognizes a big endian unsigned 3 byte integer. |
143 | | /// |
144 | | /// ```rust |
145 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
146 | | /// use nom::number::be_u24; |
147 | | /// |
148 | | /// let parser = |s| { |
149 | | /// be_u24::<_, (_, ErrorKind)>().parse(s) |
150 | | /// }; |
151 | | /// |
152 | | /// assert_eq!(parser(&b"\x00\x01\x02abcd"[..]), Ok((&b"abcd"[..], 0x000102))); |
153 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(2)))); |
154 | | /// ``` |
155 | | #[inline] |
156 | 0 | pub fn be_u24<I, E: ParseError<I>>() -> impl Parser<I, Output = u32, Error = E> |
157 | 0 | where |
158 | 0 | I: Input<Item = u8>, |
159 | | { |
160 | 0 | be_uint(3) |
161 | 0 | } |
162 | | |
163 | | /// Recognizes a big endian unsigned 4 bytes integer. |
164 | | /// |
165 | | /// ```rust |
166 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
167 | | /// use nom::number::be_u32; |
168 | | /// |
169 | | /// let parser = |s| { |
170 | | /// be_u32::<_, (_, ErrorKind)>().parse(s) |
171 | | /// }; |
172 | | /// |
173 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03abcd"[..]), Ok((&b"abcd"[..], 0x00010203))); |
174 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(3)))); |
175 | | /// ``` |
176 | | #[inline] |
177 | 1.05M | pub fn be_u32<I, E: ParseError<I>>() -> impl Parser<I, Output = u32, Error = E> |
178 | 1.05M | where |
179 | 1.05M | I: Input<Item = u8>, |
180 | | { |
181 | 1.05M | be_uint(4) |
182 | 1.05M | } nom::number::be_u32::<&[u8], nom::error::Error<&[u8]>> Line | Count | Source | 177 | 1.05M | pub fn be_u32<I, E: ParseError<I>>() -> impl Parser<I, Output = u32, Error = E> | 178 | 1.05M | where | 179 | 1.05M | I: Input<Item = u8>, | 180 | | { | 181 | 1.05M | be_uint(4) | 182 | 1.05M | } |
Unexecuted instantiation: nom::number::be_u32::<_, _> |
183 | | |
184 | | /// Recognizes a big endian unsigned 8 bytes integer. |
185 | | /// |
186 | | /// ```rust |
187 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
188 | | /// use nom::number::be_u64; |
189 | | /// |
190 | | /// let parser = |s| { |
191 | | /// be_u64::<_, (_, ErrorKind)>().parse(s) |
192 | | /// }; |
193 | | /// |
194 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03\x04\x05\x06\x07abcd"[..]), Ok((&b"abcd"[..], 0x0001020304050607))); |
195 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(7)))); |
196 | | /// ``` |
197 | | #[inline] |
198 | 0 | pub fn be_u64<I, E: ParseError<I>>() -> impl Parser<I, Output = u64, Error = E> |
199 | 0 | where |
200 | 0 | I: Input<Item = u8>, |
201 | | { |
202 | 0 | be_uint(8) |
203 | 0 | } |
204 | | |
205 | | /// Recognizes a big endian unsigned 16 bytes integer. |
206 | | /// |
207 | | /// ```rust |
208 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
209 | | /// use nom::number::be_u128; |
210 | | /// |
211 | | /// let parser = |s| { |
212 | | /// be_u128::<_, (_, ErrorKind)>().parse(s) |
213 | | /// }; |
214 | | /// |
215 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15abcd"[..]), Ok((&b"abcd"[..], 0x00010203040506070809101112131415))); |
216 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(15)))); |
217 | | /// ``` |
218 | | #[inline] |
219 | 0 | pub fn be_u128<I, E: ParseError<I>>() -> impl Parser<I, Output = u128, Error = E> |
220 | 0 | where |
221 | 0 | I: Input<Item = u8>, |
222 | | { |
223 | 0 | be_uint(16) |
224 | 0 | } |
225 | | |
226 | | /// Recognizes a signed 1 byte integer. |
227 | | /// |
228 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
229 | | /// ```rust |
230 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
231 | | /// use nom::number::be_i8; |
232 | | /// |
233 | | /// let mut parser = be_i8::<_, (_, ErrorKind)>(); |
234 | | /// |
235 | | /// assert_eq!(parser.parse(&b"\x00\x01abcd"[..]), Ok((&b"\x01abcd"[..], 0x00))); |
236 | | /// assert_eq!(parser.parse(&b""[..]), Err(Err::Incomplete(Needed::new(1)))); |
237 | | /// ``` |
238 | | #[inline] |
239 | 0 | pub fn be_i8<I, E: ParseError<I>>() -> impl Parser<I, Output = i8, Error = E> |
240 | 0 | where |
241 | 0 | I: Input<Item = u8>, |
242 | | { |
243 | 0 | be_u8().map(|x| x as i8) |
244 | 0 | } |
245 | | |
246 | | /// Recognizes a big endian signed 2 bytes integer. |
247 | | /// |
248 | | /// ```rust |
249 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
250 | | /// use nom::number::be_i16; |
251 | | /// |
252 | | /// let mut parser = be_i16::<_, (_, ErrorKind)>(); |
253 | | /// |
254 | | /// assert_eq!(parser.parse(&b"\x00\x01abcd"[..]), Ok((&b"abcd"[..], 0x0001))); |
255 | | /// assert_eq!(parser.parse(&b""[..]), Err(Err::Incomplete(Needed::new(2)))); |
256 | | /// ``` |
257 | | #[inline] |
258 | 0 | pub fn be_i16<I, E: ParseError<I>>() -> impl Parser<I, Output = i16, Error = E> |
259 | 0 | where |
260 | 0 | I: Input<Item = u8>, |
261 | | { |
262 | 0 | be_u16().map(|x| x as i16) |
263 | 0 | } |
264 | | |
265 | | /// Recognizes a big endian signed 3 bytes integer. |
266 | | /// |
267 | | /// ```rust |
268 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
269 | | /// use nom::number::be_i24; |
270 | | /// |
271 | | /// let mut parser = be_i24::<_, (_, ErrorKind)>(); |
272 | | /// |
273 | | /// assert_eq!(parser.parse(&b"\x00\x01\x02abcd"[..]), Ok((&b"abcd"[..], 0x000102))); |
274 | | /// assert_eq!(parser.parse(&b""[..]), Err(Err::Incomplete(Needed::new(3)))); |
275 | | /// ``` |
276 | | #[inline] |
277 | 0 | pub fn be_i24<I, E: ParseError<I>>() -> impl Parser<I, Output = i32, Error = E> |
278 | 0 | where |
279 | 0 | I: Input<Item = u8>, |
280 | | { |
281 | | // Same as the unsigned version but we need to sign-extend manually here |
282 | 0 | be_u24().map(|x| { |
283 | 0 | if x & 0x80_00_00 != 0 { |
284 | 0 | (x | 0xff_00_00_00) as i32 |
285 | | } else { |
286 | 0 | x as i32 |
287 | | } |
288 | 0 | }) |
289 | 0 | } |
290 | | |
291 | | /// Recognizes a big endian signed 4 bytes integer. |
292 | | /// |
293 | | /// ```rust |
294 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
295 | | /// use nom::number::be_i32; |
296 | | /// |
297 | | /// let mut parser = be_i32::<_, (_, ErrorKind)>(); |
298 | | /// |
299 | | /// assert_eq!(parser.parse(&b"\x00\x01\x02\x03abcd"[..]), Ok((&b"abcd"[..], 0x00010203))); |
300 | | /// assert_eq!(parser.parse(&b""[..]), Err(Err::Incomplete(Needed::new(4)))); |
301 | | /// ``` |
302 | | #[inline] |
303 | 0 | pub fn be_i32<I, E: ParseError<I>>() -> impl Parser<I, Output = i32, Error = E> |
304 | 0 | where |
305 | 0 | I: Input<Item = u8>, |
306 | | { |
307 | 0 | be_u32().map(|x| x as i32) |
308 | 0 | } |
309 | | |
310 | | /// Recognizes a big endian signed 8 bytes integer. |
311 | | /// |
312 | | /// ```rust |
313 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
314 | | /// use nom::number::be_i64; |
315 | | /// |
316 | | /// let mut parser = be_i64::<_, (_, ErrorKind)>(); |
317 | | /// |
318 | | /// assert_eq!(parser.parse(&b"\x00\x01\x02\x03\x04\x05\x06\x07abcd"[..]), Ok((&b"abcd"[..], 0x0001020304050607))); |
319 | | /// assert_eq!(parser.parse(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(7)))); |
320 | | /// ``` |
321 | | #[inline] |
322 | 0 | pub fn be_i64<I, E: ParseError<I>>() -> impl Parser<I, Output = i64, Error = E> |
323 | 0 | where |
324 | 0 | I: Input<Item = u8>, |
325 | | { |
326 | 0 | be_u64().map(|x| x as i64) |
327 | 0 | } |
328 | | |
329 | | /// Recognizes a big endian signed 16 bytes integer. |
330 | | /// |
331 | | /// ```rust |
332 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
333 | | /// use nom::number::be_i128; |
334 | | /// |
335 | | /// let mut parser = be_i128::<_, (_, ErrorKind)>(); |
336 | | /// |
337 | | /// assert_eq!(parser.parse(&b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15abcd"[..]), Ok((&b"abcd"[..], 0x00010203040506070809101112131415))); |
338 | | /// assert_eq!(parser.parse(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(15)))); |
339 | | /// ``` |
340 | | #[inline] |
341 | 0 | pub fn be_i128<I, E: ParseError<I>>() -> impl Parser<I, Output = i128, Error = E> |
342 | 0 | where |
343 | 0 | I: Input<Item = u8>, |
344 | | { |
345 | 0 | be_u128().map(|x| x as i128) |
346 | 0 | } |
347 | | |
348 | | /// creates a little endian unsigned integer parser |
349 | | /// |
350 | | /// * `bound`: the number of bytes that will be read |
351 | | /// * `Uint`: the output type |
352 | | #[inline] |
353 | 62.5M | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> |
354 | 62.5M | where |
355 | 62.5M | I: Input<Item = u8>, |
356 | 62.5M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, |
357 | | { |
358 | 62.5M | LeUint { |
359 | 62.5M | bound, |
360 | 62.5M | e: PhantomData, |
361 | 62.5M | u: PhantomData, |
362 | 62.5M | } |
363 | 62.5M | } nom::number::le_uint::<&[u8], u32, suricata::quic::error::QuicError> Line | Count | Source | 353 | 133k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 133k | where | 355 | 133k | I: Input<Item = u8>, | 356 | 133k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 133k | LeUint { | 359 | 133k | bound, | 360 | 133k | e: PhantomData, | 361 | 133k | u: PhantomData, | 362 | 133k | } | 363 | 133k | } |
nom::number::le_uint::<&[u8], u16, suricata::quic::error::QuicError> Line | Count | Source | 353 | 17.7k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 17.7k | where | 355 | 17.7k | I: Input<Item = u8>, | 356 | 17.7k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 17.7k | LeUint { | 359 | 17.7k | bound, | 360 | 17.7k | e: PhantomData, | 361 | 17.7k | u: PhantomData, | 362 | 17.7k | } | 363 | 17.7k | } |
nom::number::le_uint::<&[u8], u8, suricata::rdp::error::RdpError> Line | Count | Source | 353 | 228k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 228k | where | 355 | 228k | I: Input<Item = u8>, | 356 | 228k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 228k | LeUint { | 359 | 228k | bound, | 360 | 228k | e: PhantomData, | 361 | 228k | u: PhantomData, | 362 | 228k | } | 363 | 228k | } |
nom::number::le_uint::<&[u8], u8, suricata::smb::error::SmbError> Line | Count | Source | 353 | 255k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 255k | where | 355 | 255k | I: Input<Item = u8>, | 356 | 255k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 255k | LeUint { | 359 | 255k | bound, | 360 | 255k | e: PhantomData, | 361 | 255k | u: PhantomData, | 362 | 255k | } | 363 | 255k | } |
nom::number::le_uint::<&[u8], u32, suricata::rdp::error::RdpError> Line | Count | Source | 353 | 3.61k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 3.61k | where | 355 | 3.61k | I: Input<Item = u8>, | 356 | 3.61k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 3.61k | LeUint { | 359 | 3.61k | bound, | 360 | 3.61k | e: PhantomData, | 361 | 3.61k | u: PhantomData, | 362 | 3.61k | } | 363 | 3.61k | } |
nom::number::le_uint::<&[u8], u32, suricata::smb::error::SmbError> Line | Count | Source | 353 | 199k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 199k | where | 355 | 199k | I: Input<Item = u8>, | 356 | 199k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 199k | LeUint { | 359 | 199k | bound, | 360 | 199k | e: PhantomData, | 361 | 199k | u: PhantomData, | 362 | 199k | } | 363 | 199k | } |
nom::number::le_uint::<&[u8], u16, suricata::rdp::error::RdpError> Line | Count | Source | 353 | 5.41k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 5.41k | where | 355 | 5.41k | I: Input<Item = u8>, | 356 | 5.41k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 5.41k | LeUint { | 359 | 5.41k | bound, | 360 | 5.41k | e: PhantomData, | 361 | 5.41k | u: PhantomData, | 362 | 5.41k | } | 363 | 5.41k | } |
nom::number::le_uint::<&[u8], u16, suricata::smb::error::SmbError> Line | Count | Source | 353 | 966k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 966k | where | 355 | 966k | I: Input<Item = u8>, | 356 | 966k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 966k | LeUint { | 359 | 966k | bound, | 360 | 966k | e: PhantomData, | 361 | 966k | u: PhantomData, | 362 | 966k | } | 363 | 966k | } |
nom::number::le_uint::<&[u8], u8, nom::error::Error<&[u8]>> Line | Count | Source | 353 | 22.1M | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 22.1M | where | 355 | 22.1M | I: Input<Item = u8>, | 356 | 22.1M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 22.1M | LeUint { | 359 | 22.1M | bound, | 360 | 22.1M | e: PhantomData, | 361 | 22.1M | u: PhantomData, | 362 | 22.1M | } | 363 | 22.1M | } |
nom::number::le_uint::<&[u8], u32, nom::error::Error<&[u8]>> Line | Count | Source | 353 | 11.3M | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 11.3M | where | 355 | 11.3M | I: Input<Item = u8>, | 356 | 11.3M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 11.3M | LeUint { | 359 | 11.3M | bound, | 360 | 11.3M | e: PhantomData, | 361 | 11.3M | u: PhantomData, | 362 | 11.3M | } | 363 | 11.3M | } |
nom::number::le_uint::<&[u8], u16, nom::error::Error<&[u8]>> Line | Count | Source | 353 | 24.3M | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 24.3M | where | 355 | 24.3M | I: Input<Item = u8>, | 356 | 24.3M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 24.3M | LeUint { | 359 | 24.3M | bound, | 360 | 24.3M | e: PhantomData, | 361 | 24.3M | u: PhantomData, | 362 | 24.3M | } | 363 | 24.3M | } |
nom::number::le_uint::<&[u8], u64, nom::error::Error<&[u8]>> Line | Count | Source | 353 | 2.82M | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 2.82M | where | 355 | 2.82M | I: Input<Item = u8>, | 356 | 2.82M | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 2.82M | LeUint { | 359 | 2.82M | bound, | 360 | 2.82M | e: PhantomData, | 361 | 2.82M | u: PhantomData, | 362 | 2.82M | } | 363 | 2.82M | } |
nom::number::le_uint::<&[u8], u16, nom::error::Error<&[u8]>> Line | Count | Source | 353 | 5.26k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 5.26k | where | 355 | 5.26k | I: Input<Item = u8>, | 356 | 5.26k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 5.26k | LeUint { | 359 | 5.26k | bound, | 360 | 5.26k | e: PhantomData, | 361 | 5.26k | u: PhantomData, | 362 | 5.26k | } | 363 | 5.26k | } |
nom::number::le_uint::<&[u8], u8, nom::error::Error<&[u8]>> Line | Count | Source | 353 | 57.8k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 57.8k | where | 355 | 57.8k | I: Input<Item = u8>, | 356 | 57.8k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 57.8k | LeUint { | 359 | 57.8k | bound, | 360 | 57.8k | e: PhantomData, | 361 | 57.8k | u: PhantomData, | 362 | 57.8k | } | 363 | 57.8k | } |
nom::number::le_uint::<&[u8], u32, nom::error::Error<&[u8]>> Line | Count | Source | 353 | 22.6k | fn le_uint<I, Uint, E: ParseError<I>>(bound: usize) -> impl Parser<I, Output = Uint, Error = E> | 354 | 22.6k | where | 355 | 22.6k | I: Input<Item = u8>, | 356 | 22.6k | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, | 357 | | { | 358 | 22.6k | LeUint { | 359 | 22.6k | bound, | 360 | 22.6k | e: PhantomData, | 361 | 22.6k | u: PhantomData, | 362 | 22.6k | } | 363 | 22.6k | } |
Unexecuted instantiation: nom::number::le_uint::<_, _, _> |
364 | | |
365 | | /// Little endian unsigned integer parser |
366 | | struct LeUint<Uint, E> { |
367 | | bound: usize, |
368 | | e: PhantomData<E>, |
369 | | u: PhantomData<Uint>, |
370 | | } |
371 | | |
372 | | impl<I, Uint, E: ParseError<I>> Parser<I> for LeUint<Uint, E> |
373 | | where |
374 | | I: Input<Item = u8>, |
375 | | Uint: Default + Shl<u8, Output = Uint> + Add<Uint, Output = Uint> + From<u8>, |
376 | | { |
377 | | type Output = Uint; |
378 | | type Error = E; |
379 | | |
380 | | #[inline(always)] |
381 | 62.5M | fn process<OM: crate::OutputMode>( |
382 | 62.5M | &mut self, |
383 | 62.5M | input: I, |
384 | 62.5M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { |
385 | 62.5M | if input.input_len() < self.bound { |
386 | 1.11M | if OM::Incomplete::is_streaming() { |
387 | 716k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) |
388 | | } else { |
389 | 393k | Err(Err::Error(OM::Error::bind(|| { |
390 | 393k | make_error(input, ErrorKind::Eof) |
391 | 393k | }))) <nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 389 | 59.3k | Err(Err::Error(OM::Error::bind(|| { | 390 | 59.3k | make_error(input, ErrorKind::Eof) | 391 | 59.3k | }))) |
<nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 389 | 66.8k | Err(Err::Error(OM::Error::bind(|| { | 390 | 66.8k | make_error(input, ErrorKind::Eof) | 391 | 66.8k | }))) |
<nom::number::LeUint<u32, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 389 | 618 | Err(Err::Error(OM::Error::bind(|| { | 390 | 618 | make_error(input, ErrorKind::Eof) | 391 | 618 | }))) |
<nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 389 | 266k | Err(Err::Error(OM::Error::bind(|| { | 390 | 266k | make_error(input, ErrorKind::Eof) | 391 | 266k | }))) |
<nom::number::LeUint<u16, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 389 | 559 | Err(Err::Error(OM::Error::bind(|| { | 390 | 559 | make_error(input, ErrorKind::Eof) | 391 | 559 | }))) |
<nom::number::LeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#0}Line | Count | Source | 389 | 126 | Err(Err::Error(OM::Error::bind(|| { | 390 | 126 | make_error(input, ErrorKind::Eof) | 391 | 126 | }))) |
Unexecuted instantiation: <nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u8, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u8, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u32, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u32, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u16, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u16, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#0}Unexecuted instantiation: <nom::number::LeUint<_, _> as nom::internal::Parser<_>>::process::<_>::{closure#0} |
392 | | } |
393 | | } else { |
394 | 61.4M | let res = OM::Output::bind(|| { |
395 | 61.4M | let mut res = Uint::default(); |
396 | 140M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { |
397 | 140M | res = res + (Uint::from(byte) << (8 * index as u8)); |
398 | 140M | } |
399 | | |
400 | 61.4M | res |
401 | 61.4M | }); <nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 394 | 12.1M | let res = OM::Output::bind(|| { | 395 | 12.1M | let mut res = Uint::default(); | 396 | 12.1M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 12.1M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 12.1M | } | 399 | | | 400 | 12.1M | res | 401 | 12.1M | }); |
<nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 394 | 5.28M | let res = OM::Output::bind(|| { | 395 | 5.28M | let mut res = Uint::default(); | 396 | 21.1M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 21.1M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 21.1M | } | 399 | | | 400 | 5.28M | res | 401 | 5.28M | }); |
<nom::number::LeUint<u32, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 394 | 132k | let res = OM::Output::bind(|| { | 395 | 132k | let mut res = Uint::default(); | 396 | 529k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 529k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 529k | } | 399 | | | 400 | 132k | res | 401 | 132k | }); |
<nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 394 | 8.85M | let res = OM::Output::bind(|| { | 395 | 8.85M | let mut res = Uint::default(); | 396 | 17.7M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 17.7M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 17.7M | } | 399 | | | 400 | 8.85M | res | 401 | 8.85M | }); |
<nom::number::LeUint<u16, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 394 | 17.2k | let res = OM::Output::bind(|| { | 395 | 17.2k | let mut res = Uint::default(); | 396 | 34.4k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 34.4k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 34.4k | } | 399 | | | 400 | 17.2k | res | 401 | 17.2k | }); |
<nom::number::LeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>>::{closure#1}Line | Count | Source | 394 | 927k | let res = OM::Output::bind(|| { | 395 | 927k | let mut res = Uint::default(); | 396 | 7.41M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 7.41M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 7.41M | } | 399 | | | 400 | 927k | res | 401 | 927k | }); |
<nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 9.57M | let res = OM::Output::bind(|| { | 395 | 9.57M | let mut res = Uint::default(); | 396 | 9.57M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 9.57M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 9.57M | } | 399 | | | 400 | 9.57M | res | 401 | 9.57M | }); |
<nom::number::LeUint<u8, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 227k | let res = OM::Output::bind(|| { | 395 | 227k | let mut res = Uint::default(); | 396 | 227k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 227k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 227k | } | 399 | | | 400 | 227k | res | 401 | 227k | }); |
<nom::number::LeUint<u8, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 218k | let res = OM::Output::bind(|| { | 395 | 218k | let mut res = Uint::default(); | 396 | 218k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 218k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 218k | } | 399 | | | 400 | 218k | res | 401 | 218k | }); |
<nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 5.92M | let res = OM::Output::bind(|| { | 395 | 5.92M | let mut res = Uint::default(); | 396 | 23.7M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 23.7M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 23.7M | } | 399 | | | 400 | 5.92M | res | 401 | 5.92M | }); |
<nom::number::LeUint<u32, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 3.03k | let res = OM::Output::bind(|| { | 395 | 3.03k | let mut res = Uint::default(); | 396 | 12.1k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 12.1k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 12.1k | } | 399 | | | 400 | 3.03k | res | 401 | 3.03k | }); |
<nom::number::LeUint<u32, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 197k | let res = OM::Output::bind(|| { | 395 | 197k | let mut res = Uint::default(); | 396 | 790k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 790k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 790k | } | 399 | | | 400 | 197k | res | 401 | 197k | }); |
<nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 15.1M | let res = OM::Output::bind(|| { | 395 | 15.1M | let mut res = Uint::default(); | 396 | 30.2M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 30.2M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 30.2M | } | 399 | | | 400 | 15.1M | res | 401 | 15.1M | }); |
<nom::number::LeUint<u16, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 4.56k | let res = OM::Output::bind(|| { | 395 | 4.56k | let mut res = Uint::default(); | 396 | 9.13k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 9.13k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 9.13k | } | 399 | | | 400 | 4.56k | res | 401 | 4.56k | }); |
<nom::number::LeUint<u16, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 882k | let res = OM::Output::bind(|| { | 395 | 882k | let mut res = Uint::default(); | 396 | 1.76M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 1.76M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 1.76M | } | 399 | | | 400 | 882k | res | 401 | 882k | }); |
<nom::number::LeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 1.88M | let res = OM::Output::bind(|| { | 395 | 1.88M | let mut res = Uint::default(); | 396 | 15.1M | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 15.1M | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 15.1M | } | 399 | | | 400 | 1.88M | res | 401 | 1.88M | }); |
<nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 3.95k | let res = OM::Output::bind(|| { | 395 | 3.95k | let mut res = Uint::default(); | 396 | 7.91k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 7.91k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 7.91k | } | 399 | | | 400 | 3.95k | res | 401 | 3.95k | }); |
<nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 56.1k | let res = OM::Output::bind(|| { | 395 | 56.1k | let mut res = Uint::default(); | 396 | 56.1k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 56.1k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 56.1k | } | 399 | | | 400 | 56.1k | res | 401 | 56.1k | }); |
<nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>>::{closure#1}Line | Count | Source | 394 | 18.0k | let res = OM::Output::bind(|| { | 395 | 18.0k | let mut res = Uint::default(); | 396 | 72.1k | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | 72.1k | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | 72.1k | } | 399 | | | 400 | 18.0k | res | 401 | 18.0k | }); |
Unexecuted instantiation: <nom::number::LeUint<_, _> as nom::internal::Parser<_>>::process::<_>::{closure#1} |
402 | | |
403 | 61.4M | Ok((input.take_from(self.bound), res)) |
404 | | } |
405 | 62.5M | } <nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 381 | 12.1M | fn process<OM: crate::OutputMode>( | 382 | 12.1M | &mut self, | 383 | 12.1M | input: I, | 384 | 12.1M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 12.1M | if input.input_len() < self.bound { | 386 | 59.3k | if OM::Incomplete::is_streaming() { | 387 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 59.3k | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 12.1M | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 12.1M | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 12.1M | } |
<nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 381 | 5.34M | fn process<OM: crate::OutputMode>( | 382 | 5.34M | &mut self, | 383 | 5.34M | input: I, | 384 | 5.34M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 5.34M | if input.input_len() < self.bound { | 386 | 66.8k | if OM::Incomplete::is_streaming() { | 387 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 66.8k | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 5.28M | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 5.28M | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 5.34M | } |
<nom::number::LeUint<u32, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 381 | 133k | fn process<OM: crate::OutputMode>( | 382 | 133k | &mut self, | 383 | 133k | input: I, | 384 | 133k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 133k | if input.input_len() < self.bound { | 386 | 618 | if OM::Incomplete::is_streaming() { | 387 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 618 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 132k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 132k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 133k | } |
<nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 381 | 9.11M | fn process<OM: crate::OutputMode>( | 382 | 9.11M | &mut self, | 383 | 9.11M | input: I, | 384 | 9.11M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 9.11M | if input.input_len() < self.bound { | 386 | 266k | if OM::Incomplete::is_streaming() { | 387 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 266k | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 8.85M | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 8.85M | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 9.11M | } |
<nom::number::LeUint<u16, suricata::quic::error::QuicError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 381 | 17.7k | fn process<OM: crate::OutputMode>( | 382 | 17.7k | &mut self, | 383 | 17.7k | input: I, | 384 | 17.7k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 17.7k | if input.input_len() < self.bound { | 386 | 559 | if OM::Incomplete::is_streaming() { | 387 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 559 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 17.2k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 17.2k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 17.7k | } |
<nom::number::LeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Complete>> Line | Count | Source | 381 | 927k | fn process<OM: crate::OutputMode>( | 382 | 927k | &mut self, | 383 | 927k | input: I, | 384 | 927k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 927k | if input.input_len() < self.bound { | 386 | 126 | if OM::Incomplete::is_streaming() { | 387 | 0 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 126 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 927k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 927k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 927k | } |
<nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 9.96M | fn process<OM: crate::OutputMode>( | 382 | 9.96M | &mut self, | 383 | 9.96M | input: I, | 384 | 9.96M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 9.96M | if input.input_len() < self.bound { | 386 | 382k | if OM::Incomplete::is_streaming() { | 387 | 382k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 9.57M | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 9.57M | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 9.96M | } |
<nom::number::LeUint<u8, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 228k | fn process<OM: crate::OutputMode>( | 382 | 228k | &mut self, | 383 | 228k | input: I, | 384 | 228k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 228k | if input.input_len() < self.bound { | 386 | 1.56k | if OM::Incomplete::is_streaming() { | 387 | 1.56k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 227k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 227k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 228k | } |
<nom::number::LeUint<u8, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 255k | fn process<OM: crate::OutputMode>( | 382 | 255k | &mut self, | 383 | 255k | input: I, | 384 | 255k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 255k | if input.input_len() < self.bound { | 386 | 36.7k | if OM::Incomplete::is_streaming() { | 387 | 36.7k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 218k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 218k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 255k | } |
<nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 5.98M | fn process<OM: crate::OutputMode>( | 382 | 5.98M | &mut self, | 383 | 5.98M | input: I, | 384 | 5.98M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 5.98M | if input.input_len() < self.bound { | 386 | 60.4k | if OM::Incomplete::is_streaming() { | 387 | 60.4k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 5.92M | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 5.92M | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 5.98M | } |
<nom::number::LeUint<u32, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 3.61k | fn process<OM: crate::OutputMode>( | 382 | 3.61k | &mut self, | 383 | 3.61k | input: I, | 384 | 3.61k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 3.61k | if input.input_len() < self.bound { | 386 | 588 | if OM::Incomplete::is_streaming() { | 387 | 588 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 3.03k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 3.03k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 3.61k | } |
<nom::number::LeUint<u32, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 199k | fn process<OM: crate::OutputMode>( | 382 | 199k | &mut self, | 383 | 199k | input: I, | 384 | 199k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 199k | if input.input_len() < self.bound { | 386 | 1.96k | if OM::Incomplete::is_streaming() { | 387 | 1.96k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 197k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 197k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 199k | } |
<nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 15.2M | fn process<OM: crate::OutputMode>( | 382 | 15.2M | &mut self, | 383 | 15.2M | input: I, | 384 | 15.2M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 15.2M | if input.input_len() < self.bound { | 386 | 129k | if OM::Incomplete::is_streaming() { | 387 | 129k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 15.1M | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 15.1M | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 15.2M | } |
<nom::number::LeUint<u16, suricata::rdp::error::RdpError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 5.41k | fn process<OM: crate::OutputMode>( | 382 | 5.41k | &mut self, | 383 | 5.41k | input: I, | 384 | 5.41k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 5.41k | if input.input_len() < self.bound { | 386 | 846 | if OM::Incomplete::is_streaming() { | 387 | 846 | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 4.56k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 4.56k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 5.41k | } |
<nom::number::LeUint<u16, suricata::smb::error::SmbError> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 966k | fn process<OM: crate::OutputMode>( | 382 | 966k | &mut self, | 383 | 966k | input: I, | 384 | 966k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 966k | if input.input_len() < self.bound { | 386 | 83.8k | if OM::Incomplete::is_streaming() { | 387 | 83.8k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 882k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 882k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 966k | } |
<nom::number::LeUint<u64, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 1.90M | fn process<OM: crate::OutputMode>( | 382 | 1.90M | &mut self, | 383 | 1.90M | input: I, | 384 | 1.90M | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 1.90M | if input.input_len() < self.bound { | 386 | 11.4k | if OM::Incomplete::is_streaming() { | 387 | 11.4k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 1.88M | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 1.88M | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 1.90M | } |
<nom::number::LeUint<u16, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 5.26k | fn process<OM: crate::OutputMode>( | 382 | 5.26k | &mut self, | 383 | 5.26k | input: I, | 384 | 5.26k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 5.26k | if input.input_len() < self.bound { | 386 | 1.30k | if OM::Incomplete::is_streaming() { | 387 | 1.30k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 3.95k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 3.95k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 5.26k | } |
<nom::number::LeUint<u8, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 57.8k | fn process<OM: crate::OutputMode>( | 382 | 57.8k | &mut self, | 383 | 57.8k | input: I, | 384 | 57.8k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 57.8k | if input.input_len() < self.bound { | 386 | 1.65k | if OM::Incomplete::is_streaming() { | 387 | 1.65k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 56.1k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 56.1k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 57.8k | } |
<nom::number::LeUint<u32, nom::error::Error<&[u8]>> as nom::internal::Parser<&[u8]>>::process::<nom::internal::OutputM<nom::internal::Emit, nom::internal::Emit, nom::internal::Streaming>> Line | Count | Source | 381 | 22.6k | fn process<OM: crate::OutputMode>( | 382 | 22.6k | &mut self, | 383 | 22.6k | input: I, | 384 | 22.6k | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { | 385 | 22.6k | if input.input_len() < self.bound { | 386 | 4.61k | if OM::Incomplete::is_streaming() { | 387 | 4.61k | Err(Err::Incomplete(Needed::new(self.bound - input.input_len()))) | 388 | | } else { | 389 | 0 | Err(Err::Error(OM::Error::bind(|| { | 390 | | make_error(input, ErrorKind::Eof) | 391 | | }))) | 392 | | } | 393 | | } else { | 394 | 18.0k | let res = OM::Output::bind(|| { | 395 | | let mut res = Uint::default(); | 396 | | for (index, byte) in input.iter_elements().take(self.bound).enumerate() { | 397 | | res = res + (Uint::from(byte) << (8 * index as u8)); | 398 | | } | 399 | | | 400 | | res | 401 | | }); | 402 | | | 403 | 18.0k | Ok((input.take_from(self.bound), res)) | 404 | | } | 405 | 22.6k | } |
Unexecuted instantiation: <nom::number::LeUint<_, _> as nom::internal::Parser<_>>::process::<_> |
406 | | } |
407 | | |
408 | | /// Recognizes an unsigned 1 byte integer. |
409 | | /// |
410 | | /// ```rust |
411 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
412 | | /// use nom::number::le_u8; |
413 | | /// |
414 | | /// let mut parser = le_u8::<_, (_, ErrorKind)>(); |
415 | | /// |
416 | | /// assert_eq!(parser.parse(&b"\x00\x01abcd"[..]), Ok((&b"\x01abcd"[..], 0x00))); |
417 | | /// assert_eq!(parser.parse(&b""[..]), Err(Err::Incomplete(Needed::new(1)))); |
418 | | /// ``` |
419 | | #[inline] |
420 | 0 | pub fn le_u8<I, E: ParseError<I>>() -> impl Parser<I, Output = u8, Error = E> |
421 | 0 | where |
422 | 0 | I: Input<Item = u8>, |
423 | | { |
424 | 0 | le_uint(1) |
425 | 0 | } |
426 | | |
427 | | /// Recognizes a little endian unsigned 2 bytes integer. |
428 | | /// |
429 | | /// |
430 | | /// ```rust |
431 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
432 | | /// use nom::number::le_u16; |
433 | | /// |
434 | | /// let parser = |s| { |
435 | | /// le_u16::<_, (_, ErrorKind)>().parse(s) |
436 | | /// }; |
437 | | /// |
438 | | /// assert_eq!(parser(&b"\x00\x01abcd"[..]), Ok((&b"abcd"[..], 0x0100))); |
439 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(1)))); |
440 | | /// ``` |
441 | | #[inline] |
442 | 3.18M | pub fn le_u16<I, E: ParseError<I>>() -> impl Parser<I, Output = u16, Error = E> |
443 | 3.18M | where |
444 | 3.18M | I: Input<Item = u8>, |
445 | | { |
446 | 3.18M | le_uint(2) |
447 | 3.18M | } nom::number::le_u16::<&[u8], suricata::smb::error::SmbError> Line | Count | Source | 442 | 20.8k | pub fn le_u16<I, E: ParseError<I>>() -> impl Parser<I, Output = u16, Error = E> | 443 | 20.8k | where | 444 | 20.8k | I: Input<Item = u8>, | 445 | | { | 446 | 20.8k | le_uint(2) | 447 | 20.8k | } |
nom::number::le_u16::<&[u8], nom::error::Error<&[u8]>> Line | Count | Source | 442 | 3.16M | pub fn le_u16<I, E: ParseError<I>>() -> impl Parser<I, Output = u16, Error = E> | 443 | 3.16M | where | 444 | 3.16M | I: Input<Item = u8>, | 445 | | { | 446 | 3.16M | le_uint(2) | 447 | 3.16M | } |
Unexecuted instantiation: nom::number::le_u16::<_, _> |
448 | | |
449 | | /// Recognizes a little endian unsigned 3 bytes integer. |
450 | | /// |
451 | | /// ```rust |
452 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
453 | | /// use nom::number::le_u24; |
454 | | /// |
455 | | /// let parser = |s| { |
456 | | /// le_u24::<_, (_, ErrorKind)>().parse(s) |
457 | | /// }; |
458 | | /// |
459 | | /// assert_eq!(parser(&b"\x00\x01\x02abcd"[..]), Ok((&b"abcd"[..], 0x020100))); |
460 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(2)))); |
461 | | /// ``` |
462 | | #[inline] |
463 | 0 | pub fn le_u24<I, E: ParseError<I>>() -> impl Parser<I, Output = u32, Error = E> |
464 | 0 | where |
465 | 0 | I: Input<Item = u8>, |
466 | | { |
467 | 0 | le_uint(3) |
468 | 0 | } |
469 | | |
470 | | /// Recognizes a little endian unsigned 4 bytes integer. |
471 | | /// |
472 | | /// ```rust |
473 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
474 | | /// use nom::number::le_u32; |
475 | | /// |
476 | | /// let parser = |s| { |
477 | | /// le_u32::<_, (_, ErrorKind)>().parse(s) |
478 | | /// }; |
479 | | /// |
480 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03abcd"[..]), Ok((&b"abcd"[..], 0x03020100))); |
481 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(3)))); |
482 | | /// ``` |
483 | | #[inline] |
484 | 1.37M | pub fn le_u32<I, E: ParseError<I>>() -> impl Parser<I, Output = u32, Error = E> |
485 | 1.37M | where |
486 | 1.37M | I: Input<Item = u8>, |
487 | | { |
488 | 1.37M | le_uint(4) |
489 | 1.37M | } nom::number::le_u32::<&[u8], nom::error::Error<&[u8]>> Line | Count | Source | 484 | 1.37M | pub fn le_u32<I, E: ParseError<I>>() -> impl Parser<I, Output = u32, Error = E> | 485 | 1.37M | where | 486 | 1.37M | I: Input<Item = u8>, | 487 | | { | 488 | 1.37M | le_uint(4) | 489 | 1.37M | } |
Unexecuted instantiation: nom::number::le_u32::<_, _> |
490 | | |
491 | | /// Recognizes a little endian unsigned 8 bytes integer. |
492 | | /// |
493 | | /// ```rust |
494 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
495 | | /// use nom::number::le_u64; |
496 | | /// |
497 | | /// let parser = |s| { |
498 | | /// le_u64::<_, (_, ErrorKind)>().parse(s) |
499 | | /// }; |
500 | | /// |
501 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03\x04\x05\x06\x07abcd"[..]), Ok((&b"abcd"[..], 0x0706050403020100))); |
502 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(7)))); |
503 | | /// ``` |
504 | | #[inline] |
505 | 0 | pub fn le_u64<I, E: ParseError<I>>() -> impl Parser<I, Output = u64, Error = E> |
506 | 0 | where |
507 | 0 | I: Input<Item = u8>, |
508 | | { |
509 | 0 | le_uint(8) |
510 | 0 | } |
511 | | |
512 | | /// Recognizes a little endian unsigned 16 bytes integer. |
513 | | /// |
514 | | /// ```rust |
515 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
516 | | /// use nom::number::le_u128; |
517 | | /// |
518 | | /// let mut parser = |s| { |
519 | | /// le_u128::<_, (_, ErrorKind)>().parse(s) |
520 | | /// }; |
521 | | /// |
522 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15abcd"[..]), Ok((&b"abcd"[..], 0x15141312111009080706050403020100))); |
523 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(15)))); |
524 | | /// ``` |
525 | | #[inline] |
526 | 0 | pub fn le_u128<I, E: ParseError<I>>() -> impl Parser<I, Output = u128, Error = E> |
527 | 0 | where |
528 | 0 | I: Input<Item = u8>, |
529 | | { |
530 | 0 | le_uint(16) |
531 | 0 | } |
532 | | |
533 | | /// Recognizes a signed 1 byte integer. |
534 | | /// |
535 | | /// ```rust |
536 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
537 | | /// use nom::number::le_i8; |
538 | | /// |
539 | | /// let mut parser = le_i8::<_, (_, ErrorKind)>(); |
540 | | /// |
541 | | /// assert_eq!(parser.parse(&b"\x00\x01abcd"[..]), Ok((&b"\x01abcd"[..], 0x00))); |
542 | | /// assert_eq!(parser.parse(&b""[..]), Err(Err::Incomplete(Needed::new(1)))); |
543 | | /// ``` |
544 | | #[inline] |
545 | 0 | pub fn le_i8<I, E: ParseError<I>>() -> impl Parser<I, Output = i8, Error = E> |
546 | 0 | where |
547 | 0 | I: Input<Item = u8>, |
548 | | { |
549 | 0 | le_u8().map(|x| x as i8) |
550 | 0 | } |
551 | | |
552 | | /// Recognizes a little endian signed 2 bytes integer. |
553 | | /// |
554 | | /// ```rust |
555 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
556 | | /// use nom::number::le_i16; |
557 | | /// |
558 | | /// let parser = |s| { |
559 | | /// le_i16::<_, (_, ErrorKind)>().parse(s) |
560 | | /// }; |
561 | | /// |
562 | | /// assert_eq!(parser(&b"\x00\x01abcd"[..]), Ok((&b"abcd"[..], 0x0100))); |
563 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(1)))); |
564 | | /// ``` |
565 | | #[inline] |
566 | 0 | pub fn le_i16<I, E: ParseError<I>>() -> impl Parser<I, Output = i16, Error = E> |
567 | 0 | where |
568 | 0 | I: Input<Item = u8>, |
569 | | { |
570 | 0 | le_u16().map(|x| x as i16) |
571 | 0 | } |
572 | | |
573 | | /// Recognizes a little endian signed 3 bytes integer. |
574 | | /// |
575 | | /// ```rust |
576 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
577 | | /// use nom::number::le_i24; |
578 | | /// |
579 | | /// let parser = |s| { |
580 | | /// le_i24::<_, (_, ErrorKind)>().parse(s) |
581 | | /// }; |
582 | | /// |
583 | | /// assert_eq!(parser(&b"\x00\x01\x02abcd"[..]), Ok((&b"abcd"[..], 0x020100))); |
584 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(2)))); |
585 | | /// ``` |
586 | | #[inline] |
587 | 0 | pub fn le_i24<I, E: ParseError<I>>() -> impl Parser<I, Output = i32, Error = E> |
588 | 0 | where |
589 | 0 | I: Input<Item = u8>, |
590 | | { |
591 | | // Same as the unsigned version but we need to sign-extend manually here |
592 | 0 | le_u24().map(|x| { |
593 | 0 | if x & 0x80_00_00 != 0 { |
594 | 0 | (x | 0xff_00_00_00) as i32 |
595 | | } else { |
596 | 0 | x as i32 |
597 | | } |
598 | 0 | }) |
599 | 0 | } |
600 | | |
601 | | /// Recognizes a little endian signed 4 bytes integer. |
602 | | /// |
603 | | /// ```rust |
604 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
605 | | /// use nom::number::le_i32; |
606 | | /// |
607 | | /// let parser = |s| { |
608 | | /// le_i32::<_, (_, ErrorKind)>().parse(s) |
609 | | /// }; |
610 | | /// |
611 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03abcd"[..]), Ok((&b"abcd"[..], 0x03020100))); |
612 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(3)))); |
613 | | /// ``` |
614 | | #[inline] |
615 | 0 | pub fn le_i32<I, E: ParseError<I>>() -> impl Parser<I, Output = i32, Error = E> |
616 | 0 | where |
617 | 0 | I: Input<Item = u8>, |
618 | | { |
619 | 0 | le_u32().map(|x| x as i32) |
620 | 0 | } |
621 | | |
622 | | /// Recognizes a little endian signed 8 bytes integer. |
623 | | /// |
624 | | /// ```rust |
625 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
626 | | /// use nom::number::le_i64; |
627 | | /// |
628 | | /// let parser = |s| { |
629 | | /// le_i64::<_, (_, ErrorKind)>().parse(s) |
630 | | /// }; |
631 | | /// |
632 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03\x04\x05\x06\x07abcd"[..]), Ok((&b"abcd"[..], 0x0706050403020100))); |
633 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(7)))); |
634 | | /// ``` |
635 | | #[inline] |
636 | 0 | pub fn le_i64<I, E: ParseError<I>>() -> impl Parser<I, Output = i64, Error = E> |
637 | 0 | where |
638 | 0 | I: Input<Item = u8>, |
639 | | { |
640 | 0 | le_u64().map(|x| x as i64) |
641 | 0 | } |
642 | | |
643 | | /// Recognizes a little endian signed 16 bytes integer. |
644 | | /// |
645 | | /// ```rust |
646 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
647 | | /// use nom::number::le_i128; |
648 | | /// |
649 | | /// let parser = |s| { |
650 | | /// le_i128::<_, (_, ErrorKind)>().parse(s) |
651 | | /// }; |
652 | | /// |
653 | | /// assert_eq!(parser(&b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15abcd"[..]), Ok((&b"abcd"[..], 0x15141312111009080706050403020100))); |
654 | | /// assert_eq!(parser(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(15)))); |
655 | | /// ``` |
656 | | #[inline] |
657 | 0 | pub fn le_i128<I, E: ParseError<I>>() -> impl Parser<I, Output = i128, Error = E> |
658 | 0 | where |
659 | 0 | I: Input<Item = u8>, |
660 | | { |
661 | 0 | le_u128().map(|x| x as i128) |
662 | 0 | } |
663 | | |
664 | | /// Recognizes an unsigned 1 byte integer |
665 | | /// |
666 | | /// Note that endianness does not apply to 1 byte numbers. |
667 | | /// ```rust |
668 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
669 | | /// # use nom::Needed::Size; |
670 | | /// use nom::number::u8; |
671 | | /// |
672 | | /// let parser = |s| { |
673 | | /// u8::<_, (_, ErrorKind)>().parse(s) |
674 | | /// }; |
675 | | /// |
676 | | /// assert_eq!(parser(&b"\x00\x03abcefg"[..]), Ok((&b"\x03abcefg"[..], 0x00))); |
677 | | /// assert_eq!(parser(&b""[..]), Err(Err::Incomplete(Needed::new(1)))); |
678 | | /// ``` |
679 | | #[inline] |
680 | 0 | pub fn u8<I, E: ParseError<I>>() -> impl Parser<I, Output = u8, Error = E> |
681 | 0 | where |
682 | 0 | I: Input<Item = u8>, |
683 | | { |
684 | 0 | be_u8() |
685 | 0 | } |
686 | | |
687 | | /// Recognizes an unsigned 2 bytes integer |
688 | | /// |
689 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian u16 integer, |
690 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian u16 integer. |
691 | | /// |
692 | | /// ```rust |
693 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
694 | | /// # use nom::Needed::Size; |
695 | | /// use nom::number::u16; |
696 | | /// |
697 | | /// let be_u16 = |s| { |
698 | | /// u16::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
699 | | /// }; |
700 | | /// |
701 | | /// assert_eq!(be_u16(&b"\x00\x03abcefg"[..]), Ok((&b"abcefg"[..], 0x0003))); |
702 | | /// assert_eq!(be_u16(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(1)))); |
703 | | /// |
704 | | /// let le_u16 = |s| { |
705 | | /// u16::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
706 | | /// }; |
707 | | /// |
708 | | /// assert_eq!(le_u16(&b"\x00\x03abcefg"[..]), Ok((&b"abcefg"[..], 0x0300))); |
709 | | /// assert_eq!(le_u16(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(1)))); |
710 | | /// ``` |
711 | | #[inline] |
712 | 5.35M | pub fn u16<I, E: ParseError<I>>( |
713 | 5.35M | endian: crate::number::Endianness, |
714 | 5.35M | ) -> impl Parser<I, Output = u16, Error = E> |
715 | 5.35M | where |
716 | 5.35M | I: Input<Item = u8>, |
717 | | { |
718 | 5.35M | match endian { |
719 | 2.16M | crate::number::Endianness::Big => Either::Left(be_u16()), |
720 | 3.18M | crate::number::Endianness::Little => Either::Right(le_u16()), |
721 | | #[cfg(target_endian = "big")] |
722 | | crate::number::Endianness::Native => Either::Left(be_u16()), |
723 | | #[cfg(target_endian = "little")] |
724 | 0 | crate::number::Endianness::Native => Either::Right(le_u16()), |
725 | | } |
726 | 5.35M | } nom::number::u16::<&[u8], suricata::smb::error::SmbError> Line | Count | Source | 712 | 43.3k | pub fn u16<I, E: ParseError<I>>( | 713 | 43.3k | endian: crate::number::Endianness, | 714 | 43.3k | ) -> impl Parser<I, Output = u16, Error = E> | 715 | 43.3k | where | 716 | 43.3k | I: Input<Item = u8>, | 717 | | { | 718 | 43.3k | match endian { | 719 | 22.4k | crate::number::Endianness::Big => Either::Left(be_u16()), | 720 | 20.8k | crate::number::Endianness::Little => Either::Right(le_u16()), | 721 | | #[cfg(target_endian = "big")] | 722 | | crate::number::Endianness::Native => Either::Left(be_u16()), | 723 | | #[cfg(target_endian = "little")] | 724 | 0 | crate::number::Endianness::Native => Either::Right(le_u16()), | 725 | | } | 726 | 43.3k | } |
nom::number::u16::<&[u8], nom::error::Error<&[u8]>> Line | Count | Source | 712 | 5.30M | pub fn u16<I, E: ParseError<I>>( | 713 | 5.30M | endian: crate::number::Endianness, | 714 | 5.30M | ) -> impl Parser<I, Output = u16, Error = E> | 715 | 5.30M | where | 716 | 5.30M | I: Input<Item = u8>, | 717 | | { | 718 | 5.30M | match endian { | 719 | 2.14M | crate::number::Endianness::Big => Either::Left(be_u16()), | 720 | 3.16M | crate::number::Endianness::Little => Either::Right(le_u16()), | 721 | | #[cfg(target_endian = "big")] | 722 | | crate::number::Endianness::Native => Either::Left(be_u16()), | 723 | | #[cfg(target_endian = "little")] | 724 | 0 | crate::number::Endianness::Native => Either::Right(le_u16()), | 725 | | } | 726 | 5.30M | } |
Unexecuted instantiation: nom::number::u16::<_, _> |
727 | | |
728 | | /// Recognizes an unsigned 3 byte integer |
729 | | /// |
730 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian u24 integer, |
731 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian u24 integer. |
732 | | /// ```rust |
733 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
734 | | /// # use nom::Needed::Size; |
735 | | /// use nom::number::u24; |
736 | | /// |
737 | | /// let be_u24 = |s| { |
738 | | /// u24::<_,(_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
739 | | /// }; |
740 | | /// |
741 | | /// assert_eq!(be_u24(&b"\x00\x03\x05abcefg"[..]), Ok((&b"abcefg"[..], 0x000305))); |
742 | | /// assert_eq!(be_u24(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(2)))); |
743 | | /// |
744 | | /// let le_u24 = |s| { |
745 | | /// u24::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
746 | | /// }; |
747 | | /// |
748 | | /// assert_eq!(le_u24(&b"\x00\x03\x05abcefg"[..]), Ok((&b"abcefg"[..], 0x050300))); |
749 | | /// assert_eq!(le_u24(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(2)))); |
750 | | /// ``` |
751 | | #[inline] |
752 | 0 | pub fn u24<I, E: ParseError<I>>( |
753 | 0 | endian: crate::number::Endianness, |
754 | 0 | ) -> impl Parser<I, Output = u32, Error = E> |
755 | 0 | where |
756 | 0 | I: Input<Item = u8>, |
757 | | { |
758 | 0 | match endian { |
759 | 0 | crate::number::Endianness::Big => Either::Left(be_u24()), |
760 | 0 | crate::number::Endianness::Little => Either::Right(le_u24()), |
761 | | #[cfg(target_endian = "big")] |
762 | | crate::number::Endianness::Native => Either::Left(be_u24()), |
763 | | #[cfg(target_endian = "little")] |
764 | 0 | crate::number::Endianness::Native => Either::Right(le_u24()), |
765 | | } |
766 | 0 | } |
767 | | |
768 | | /// Recognizes an unsigned 4 byte integer |
769 | | /// |
770 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian u32 integer, |
771 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian u32 integer. |
772 | | /// ```rust |
773 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
774 | | /// # use nom::Needed::Size; |
775 | | /// use nom::number::u32; |
776 | | /// |
777 | | /// let be_u32 = |s| { |
778 | | /// u32::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
779 | | /// }; |
780 | | /// |
781 | | /// assert_eq!(be_u32(&b"\x00\x03\x05\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x00030507))); |
782 | | /// assert_eq!(be_u32(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(3)))); |
783 | | /// |
784 | | /// let le_u32 = |s| { |
785 | | /// u32::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
786 | | /// }; |
787 | | /// |
788 | | /// assert_eq!(le_u32(&b"\x00\x03\x05\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x07050300))); |
789 | | /// assert_eq!(le_u32(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(3)))); |
790 | | /// ``` |
791 | | #[inline] |
792 | 2.43M | pub fn u32<I, E: ParseError<I>>( |
793 | 2.43M | endian: crate::number::Endianness, |
794 | 2.43M | ) -> impl Parser<I, Output = u32, Error = E> |
795 | 2.43M | where |
796 | 2.43M | I: Input<Item = u8>, |
797 | | { |
798 | 2.43M | match endian { |
799 | 1.05M | crate::number::Endianness::Big => Either::Left(be_u32()), |
800 | 1.37M | crate::number::Endianness::Little => Either::Right(le_u32()), |
801 | | #[cfg(target_endian = "big")] |
802 | | crate::number::Endianness::Native => Either::Left(be_u32()), |
803 | | #[cfg(target_endian = "little")] |
804 | 0 | crate::number::Endianness::Native => Either::Right(le_u32()), |
805 | | } |
806 | 2.43M | } nom::number::u32::<&[u8], nom::error::Error<&[u8]>> Line | Count | Source | 792 | 2.43M | pub fn u32<I, E: ParseError<I>>( | 793 | 2.43M | endian: crate::number::Endianness, | 794 | 2.43M | ) -> impl Parser<I, Output = u32, Error = E> | 795 | 2.43M | where | 796 | 2.43M | I: Input<Item = u8>, | 797 | | { | 798 | 2.43M | match endian { | 799 | 1.05M | crate::number::Endianness::Big => Either::Left(be_u32()), | 800 | 1.37M | crate::number::Endianness::Little => Either::Right(le_u32()), | 801 | | #[cfg(target_endian = "big")] | 802 | | crate::number::Endianness::Native => Either::Left(be_u32()), | 803 | | #[cfg(target_endian = "little")] | 804 | 0 | crate::number::Endianness::Native => Either::Right(le_u32()), | 805 | | } | 806 | 2.43M | } |
Unexecuted instantiation: nom::number::u32::<_, _> |
807 | | |
808 | | /// Recognizes an unsigned 8 byte integer |
809 | | /// |
810 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian u64 integer, |
811 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian u64 integer. |
812 | | /// ```rust |
813 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
814 | | /// # use nom::Needed::Size; |
815 | | /// use nom::number::u64; |
816 | | /// |
817 | | /// let be_u64 = |s| { |
818 | | /// u64::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
819 | | /// }; |
820 | | /// |
821 | | /// assert_eq!(be_u64(&b"\x00\x01\x02\x03\x04\x05\x06\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x0001020304050607))); |
822 | | /// assert_eq!(be_u64(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(7)))); |
823 | | /// |
824 | | /// let le_u64 = |s| { |
825 | | /// u64::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
826 | | /// }; |
827 | | /// |
828 | | /// assert_eq!(le_u64(&b"\x00\x01\x02\x03\x04\x05\x06\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x0706050403020100))); |
829 | | /// assert_eq!(le_u64(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(7)))); |
830 | | /// ``` |
831 | | #[inline] |
832 | 0 | pub fn u64<I, E: ParseError<I>>( |
833 | 0 | endian: crate::number::Endianness, |
834 | 0 | ) -> impl Parser<I, Output = u64, Error = E> |
835 | 0 | where |
836 | 0 | I: Input<Item = u8>, |
837 | | { |
838 | 0 | match endian { |
839 | 0 | crate::number::Endianness::Big => Either::Left(be_u64()), |
840 | 0 | crate::number::Endianness::Little => Either::Right(le_u64()), |
841 | | #[cfg(target_endian = "big")] |
842 | | crate::number::Endianness::Native => Either::Left(be_u64()), |
843 | | #[cfg(target_endian = "little")] |
844 | 0 | crate::number::Endianness::Native => Either::Right(le_u64()), |
845 | | } |
846 | 0 | } |
847 | | |
848 | | /// Recognizes an unsigned 16 byte integer |
849 | | /// |
850 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian u128 integer, |
851 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian u128 integer. |
852 | | /// ```rust |
853 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
854 | | /// # use nom::Needed::Size; |
855 | | /// use nom::number::u128; |
856 | | /// |
857 | | /// let be_u128 = |s| { |
858 | | /// u128::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
859 | | /// }; |
860 | | /// |
861 | | /// assert_eq!(be_u128(&b"\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x00010203040506070001020304050607))); |
862 | | /// assert_eq!(be_u128(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(15)))); |
863 | | /// |
864 | | /// let le_u128 = |s| { |
865 | | /// u128::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
866 | | /// }; |
867 | | /// |
868 | | /// assert_eq!(le_u128(&b"\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x07060504030201000706050403020100))); |
869 | | /// assert_eq!(le_u128(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(15)))); |
870 | | /// ``` |
871 | | #[inline] |
872 | 0 | pub fn u128<I, E: ParseError<I>>( |
873 | 0 | endian: crate::number::Endianness, |
874 | 0 | ) -> impl Parser<I, Output = u128, Error = E> |
875 | 0 | where |
876 | 0 | I: Input<Item = u8>, |
877 | | { |
878 | 0 | match endian { |
879 | 0 | crate::number::Endianness::Big => Either::Left(be_u128()), |
880 | 0 | crate::number::Endianness::Little => Either::Right(le_u128()), |
881 | | #[cfg(target_endian = "big")] |
882 | | crate::number::Endianness::Native => Either::Left(be_u128()), |
883 | | #[cfg(target_endian = "little")] |
884 | 0 | crate::number::Endianness::Native => Either::Right(le_u128()), |
885 | | } |
886 | 0 | } |
887 | | |
888 | | /// Recognizes a signed 1 byte integer |
889 | | /// |
890 | | /// Note that endianness does not apply to 1 byte numbers. |
891 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
892 | | /// ```rust |
893 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
894 | | /// # use nom::Needed::Size; |
895 | | /// use nom::number::i8; |
896 | | /// |
897 | | /// let parser = |s| { |
898 | | /// i8::<_, (_, ErrorKind)>().parse(s) |
899 | | /// }; |
900 | | /// |
901 | | /// assert_eq!(parser(&b"\x00\x03abcefg"[..]), Ok((&b"\x03abcefg"[..], 0x00))); |
902 | | /// assert_eq!(parser(&b""[..]), Err(Err::Incomplete(Needed::new(1)))); |
903 | | /// ``` |
904 | | #[inline] |
905 | 0 | pub fn i8<I, E: ParseError<I>>() -> impl Parser<I, Output = i8, Error = E> |
906 | 0 | where |
907 | 0 | I: Input<Item = u8>, |
908 | | { |
909 | 0 | u8().map(|x| x as i8) |
910 | 0 | } |
911 | | |
912 | | /// Recognizes a signed 2 byte integer |
913 | | /// |
914 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian i16 integer, |
915 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian i16 integer. |
916 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
917 | | /// ```rust |
918 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
919 | | /// # use nom::Needed::Size; |
920 | | /// use nom::number::i16; |
921 | | /// |
922 | | /// let be_i16 = |s| { |
923 | | /// i16::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
924 | | /// }; |
925 | | /// |
926 | | /// assert_eq!(be_i16(&b"\x00\x03abcefg"[..]), Ok((&b"abcefg"[..], 0x0003))); |
927 | | /// assert_eq!(be_i16(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(1)))); |
928 | | /// |
929 | | /// let le_i16 = |s| { |
930 | | /// i16::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
931 | | /// }; |
932 | | /// |
933 | | /// assert_eq!(le_i16(&b"\x00\x03abcefg"[..]), Ok((&b"abcefg"[..], 0x0300))); |
934 | | /// assert_eq!(le_i16(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(1)))); |
935 | | /// ``` |
936 | | #[inline] |
937 | 0 | pub fn i16<I, E: ParseError<I>>( |
938 | 0 | endian: crate::number::Endianness, |
939 | 0 | ) -> impl Parser<I, Output = i16, Error = E> |
940 | 0 | where |
941 | 0 | I: Input<Item = u8>, |
942 | | { |
943 | 0 | match endian { |
944 | 0 | crate::number::Endianness::Big => Either::Left(be_i16()), |
945 | 0 | crate::number::Endianness::Little => Either::Right(le_i16()), |
946 | | #[cfg(target_endian = "big")] |
947 | | crate::number::Endianness::Native => Either::Left(be_i16()), |
948 | | #[cfg(target_endian = "little")] |
949 | 0 | crate::number::Endianness::Native => Either::Right(le_i16()), |
950 | | } |
951 | 0 | } |
952 | | |
953 | | /// Recognizes a signed 3 byte integer |
954 | | /// |
955 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian i24 integer, |
956 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian i24 integer. |
957 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
958 | | /// ```rust |
959 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
960 | | /// # use nom::Needed::Size; |
961 | | /// use nom::number::i24; |
962 | | /// |
963 | | /// let be_i24 = |s| { |
964 | | /// i24::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
965 | | /// }; |
966 | | /// |
967 | | /// assert_eq!(be_i24(&b"\x00\x03\x05abcefg"[..]), Ok((&b"abcefg"[..], 0x000305))); |
968 | | /// assert_eq!(be_i24(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(2)))); |
969 | | /// |
970 | | /// let le_i24 = |s| { |
971 | | /// i24::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
972 | | /// }; |
973 | | /// |
974 | | /// assert_eq!(le_i24(&b"\x00\x03\x05abcefg"[..]), Ok((&b"abcefg"[..], 0x050300))); |
975 | | /// assert_eq!(le_i24(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(2)))); |
976 | | /// ``` |
977 | | #[inline] |
978 | 0 | pub fn i24<I, E: ParseError<I>>( |
979 | 0 | endian: crate::number::Endianness, |
980 | 0 | ) -> impl Parser<I, Output = i32, Error = E> |
981 | 0 | where |
982 | 0 | I: Input<Item = u8>, |
983 | | { |
984 | 0 | match endian { |
985 | 0 | crate::number::Endianness::Big => Either::Left(be_i24()), |
986 | 0 | crate::number::Endianness::Little => Either::Right(le_i24()), |
987 | | #[cfg(target_endian = "big")] |
988 | | crate::number::Endianness::Native => Either::Left(be_i24()), |
989 | | #[cfg(target_endian = "little")] |
990 | 0 | crate::number::Endianness::Native => Either::Right(le_i24()), |
991 | | } |
992 | 0 | } |
993 | | |
994 | | /// Recognizes a signed 4 byte integer |
995 | | /// |
996 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian i32 integer, |
997 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian i32 integer. |
998 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
999 | | /// ```rust |
1000 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1001 | | /// # use nom::Needed::Size; |
1002 | | /// use nom::number::i32; |
1003 | | /// |
1004 | | /// let be_i32 = |s| { |
1005 | | /// i32::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
1006 | | /// }; |
1007 | | /// |
1008 | | /// assert_eq!(be_i32(&b"\x00\x03\x05\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x00030507))); |
1009 | | /// assert_eq!(be_i32(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(3)))); |
1010 | | /// |
1011 | | /// let le_i32 = |s| { |
1012 | | /// i32::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
1013 | | /// }; |
1014 | | /// |
1015 | | /// assert_eq!(le_i32(&b"\x00\x03\x05\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x07050300))); |
1016 | | /// assert_eq!(le_i32(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(3)))); |
1017 | | /// ``` |
1018 | | #[inline] |
1019 | 0 | pub fn i32<I, E: ParseError<I>>( |
1020 | 0 | endian: crate::number::Endianness, |
1021 | 0 | ) -> impl Parser<I, Output = i32, Error = E> |
1022 | 0 | where |
1023 | 0 | I: Input<Item = u8>, |
1024 | | { |
1025 | 0 | match endian { |
1026 | 0 | crate::number::Endianness::Big => Either::Left(be_i32()), |
1027 | 0 | crate::number::Endianness::Little => Either::Right(le_i32()), |
1028 | | #[cfg(target_endian = "big")] |
1029 | | crate::number::Endianness::Native => Either::Left(be_i32()), |
1030 | | #[cfg(target_endian = "little")] |
1031 | 0 | crate::number::Endianness::Native => Either::Right(le_i32()), |
1032 | | } |
1033 | 0 | } |
1034 | | |
1035 | | /// Recognizes a signed 8 byte integer |
1036 | | /// |
1037 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian i64 integer, |
1038 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian i64 integer. |
1039 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
1040 | | /// ```rust |
1041 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1042 | | /// # use nom::Needed::Size; |
1043 | | /// use nom::number::i64; |
1044 | | /// |
1045 | | /// let be_i64 = |s| { |
1046 | | /// i64::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
1047 | | /// }; |
1048 | | /// |
1049 | | /// assert_eq!(be_i64(&b"\x00\x01\x02\x03\x04\x05\x06\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x0001020304050607))); |
1050 | | /// assert_eq!(be_i64(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(7)))); |
1051 | | /// |
1052 | | /// let le_i64 = |s| { |
1053 | | /// i64::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
1054 | | /// }; |
1055 | | /// |
1056 | | /// assert_eq!(le_i64(&b"\x00\x01\x02\x03\x04\x05\x06\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x0706050403020100))); |
1057 | | /// assert_eq!(le_i64(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(7)))); |
1058 | | /// ``` |
1059 | | #[inline] |
1060 | 0 | pub fn i64<I, E: ParseError<I>>( |
1061 | 0 | endian: crate::number::Endianness, |
1062 | 0 | ) -> impl Parser<I, Output = i64, Error = E> |
1063 | 0 | where |
1064 | 0 | I: Input<Item = u8>, |
1065 | | { |
1066 | 0 | match endian { |
1067 | 0 | crate::number::Endianness::Big => Either::Left(be_i64()), |
1068 | 0 | crate::number::Endianness::Little => Either::Right(le_i64()), |
1069 | | #[cfg(target_endian = "big")] |
1070 | | crate::number::Endianness::Native => Either::Left(be_i64()), |
1071 | | #[cfg(target_endian = "little")] |
1072 | 0 | crate::number::Endianness::Native => Either::Right(le_i64()), |
1073 | | } |
1074 | 0 | } |
1075 | | |
1076 | | /// Recognizes a signed 16 byte integer |
1077 | | /// |
1078 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian i128 integer, |
1079 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian i128 integer. |
1080 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
1081 | | /// ```rust |
1082 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1083 | | /// # use nom::Needed::Size; |
1084 | | /// use nom::number::i128; |
1085 | | /// |
1086 | | /// let be_i128 = |s| { |
1087 | | /// i128::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
1088 | | /// }; |
1089 | | /// |
1090 | | /// assert_eq!(be_i128(&b"\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x00010203040506070001020304050607))); |
1091 | | /// assert_eq!(be_i128(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(15)))); |
1092 | | /// |
1093 | | /// let le_i128 = |s| { |
1094 | | /// i128::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
1095 | | /// }; |
1096 | | /// |
1097 | | /// assert_eq!(le_i128(&b"\x00\x01\x02\x03\x04\x05\x06\x07\x00\x01\x02\x03\x04\x05\x06\x07abcefg"[..]), Ok((&b"abcefg"[..], 0x07060504030201000706050403020100))); |
1098 | | /// assert_eq!(le_i128(&b"\x01"[..]), Err(Err::Incomplete(Needed::new(15)))); |
1099 | | /// ``` |
1100 | | #[inline] |
1101 | 0 | pub fn i128<I, E: ParseError<I>>( |
1102 | 0 | endian: crate::number::Endianness, |
1103 | 0 | ) -> impl Parser<I, Output = i128, Error = E> |
1104 | 0 | where |
1105 | 0 | I: Input<Item = u8>, |
1106 | | { |
1107 | 0 | match endian { |
1108 | 0 | crate::number::Endianness::Big => Either::Left(be_i128()), |
1109 | 0 | crate::number::Endianness::Little => Either::Right(le_i128()), |
1110 | | #[cfg(target_endian = "big")] |
1111 | | crate::number::Endianness::Native => Either::Left(be_i128()), |
1112 | | #[cfg(target_endian = "little")] |
1113 | 0 | crate::number::Endianness::Native => Either::Right(le_i128()), |
1114 | | } |
1115 | 0 | } |
1116 | | |
1117 | | /// Recognizes a big endian 4 bytes floating point number. |
1118 | | /// |
1119 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
1120 | | /// ```rust |
1121 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1122 | | /// use nom::number::be_f32; |
1123 | | /// |
1124 | | /// let parser = |s| { |
1125 | | /// be_f32::<_, (_, ErrorKind)>().parse(s) |
1126 | | /// }; |
1127 | | /// |
1128 | | /// assert_eq!(parser(&[0x40, 0x29, 0x00, 0x00][..]), Ok((&b""[..], 2.640625))); |
1129 | | /// assert_eq!(parser(&[0x01][..]), Err(Err::Incomplete(Needed::new(3)))); |
1130 | | /// ``` |
1131 | | #[inline] |
1132 | 0 | pub fn be_f32<I, E: ParseError<I>>() -> impl Parser<I, Output = f32, Error = E> |
1133 | 0 | where |
1134 | 0 | I: Input<Item = u8>, |
1135 | | { |
1136 | 0 | be_u32().map(f32::from_bits) |
1137 | 0 | } |
1138 | | |
1139 | | /// Recognizes a big endian 8 bytes floating point number. |
1140 | | /// |
1141 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
1142 | | /// ```rust |
1143 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1144 | | /// use nom::number::be_f64; |
1145 | | /// |
1146 | | /// let parser = |s| { |
1147 | | /// be_f64::<_, (_, ErrorKind)>().parse(s) |
1148 | | /// }; |
1149 | | /// |
1150 | | /// assert_eq!(parser(&[0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..]), Ok((&b""[..], 12.5))); |
1151 | | /// assert_eq!(parser(&[0x01][..]), Err(Err::Incomplete(Needed::new(7)))); |
1152 | | /// ``` |
1153 | | #[inline] |
1154 | 0 | pub fn be_f64<I, E: ParseError<I>>() -> impl Parser<I, Output = f64, Error = E> |
1155 | 0 | where |
1156 | 0 | I: Input<Item = u8>, |
1157 | | { |
1158 | 0 | be_u64().map(f64::from_bits) |
1159 | 0 | } |
1160 | | |
1161 | | /// Recognizes a little endian 4 bytes floating point number. |
1162 | | /// |
1163 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
1164 | | /// ```rust |
1165 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1166 | | /// use nom::number::le_f32; |
1167 | | /// |
1168 | | /// let parser = |s| { |
1169 | | /// le_f32::<_, (_, ErrorKind)>().parse(s) |
1170 | | /// }; |
1171 | | /// |
1172 | | /// assert_eq!(parser(&[0x00, 0x00, 0x48, 0x41][..]), Ok((&b""[..], 12.5))); |
1173 | | /// assert_eq!(parser(&[0x01][..]), Err(Err::Incomplete(Needed::new(3)))); |
1174 | | /// ``` |
1175 | | #[inline] |
1176 | 0 | pub fn le_f32<I, E: ParseError<I>>() -> impl Parser<I, Output = f32, Error = E> |
1177 | 0 | where |
1178 | 0 | I: Input<Item = u8>, |
1179 | | { |
1180 | 0 | le_u32().map(f32::from_bits) |
1181 | 0 | } |
1182 | | |
1183 | | /// Recognizes a little endian 8 bytes floating point number. |
1184 | | /// |
1185 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
1186 | | /// ```rust |
1187 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1188 | | /// use nom::number::le_f64; |
1189 | | /// |
1190 | | /// let parser = |s| { |
1191 | | /// le_f64::<_, (_, ErrorKind)>().parse(s) |
1192 | | /// }; |
1193 | | /// |
1194 | | /// assert_eq!(parser(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41][..]), Ok((&b""[..], 3145728.0))); |
1195 | | /// assert_eq!(parser(&[0x01][..]), Err(Err::Incomplete(Needed::new(7)))); |
1196 | | /// ``` |
1197 | | #[inline] |
1198 | 0 | pub fn le_f64<I, E: ParseError<I>>() -> impl Parser<I, Output = f64, Error = E> |
1199 | 0 | where |
1200 | 0 | I: Input<Item = u8>, |
1201 | | { |
1202 | 0 | le_u64().map(f64::from_bits) |
1203 | 0 | } |
1204 | | |
1205 | | /// Recognizes a 4 byte floating point number |
1206 | | /// |
1207 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian f32 float, |
1208 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian f32 float. |
1209 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
1210 | | /// ```rust |
1211 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1212 | | /// # use nom::Needed::Size; |
1213 | | /// use nom::number::f32; |
1214 | | /// |
1215 | | /// let be_f32 = |s| { |
1216 | | /// f32::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
1217 | | /// }; |
1218 | | /// |
1219 | | /// assert_eq!(be_f32(&[0x41, 0x48, 0x00, 0x00][..]), Ok((&b""[..], 12.5))); |
1220 | | /// assert_eq!(be_f32(&b"abc"[..]), Err(Err::Incomplete(Needed::new(1)))); |
1221 | | /// |
1222 | | /// let le_f32 = |s| { |
1223 | | /// f32::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
1224 | | /// }; |
1225 | | /// |
1226 | | /// assert_eq!(le_f32(&[0x00, 0x00, 0x48, 0x41][..]), Ok((&b""[..], 12.5))); |
1227 | | /// assert_eq!(le_f32(&b"abc"[..]), Err(Err::Incomplete(Needed::new(1)))); |
1228 | | /// ``` |
1229 | | #[inline] |
1230 | 0 | pub fn f32<I, E: ParseError<I>>( |
1231 | 0 | endian: crate::number::Endianness, |
1232 | 0 | ) -> impl Parser<I, Output = f32, Error = E> |
1233 | 0 | where |
1234 | 0 | I: Input<Item = u8>, |
1235 | | { |
1236 | 0 | match endian { |
1237 | 0 | crate::number::Endianness::Big => Either::Left(be_f32()), |
1238 | 0 | crate::number::Endianness::Little => Either::Right(le_f32()), |
1239 | | #[cfg(target_endian = "big")] |
1240 | | crate::number::Endianness::Native => Either::Left(be_f32()), |
1241 | | #[cfg(target_endian = "little")] |
1242 | 0 | crate::number::Endianness::Native => Either::Right(le_f32()), |
1243 | | } |
1244 | 0 | } |
1245 | | |
1246 | | /// Recognizes an 8 byte floating point number |
1247 | | /// |
1248 | | /// If the parameter is `nom::number::Endianness::Big`, parse a big endian f64 float, |
1249 | | /// otherwise if `nom::number::Endianness::Little` parse a little endian f64 float. |
1250 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if there is not enough data. |
1251 | | /// ```rust |
1252 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1253 | | /// # use nom::Needed::Size; |
1254 | | /// use nom::number::f64; |
1255 | | /// |
1256 | | /// let be_f64 = |s| { |
1257 | | /// f64::<_, (_, ErrorKind)>(nom::number::Endianness::Big).parse(s) |
1258 | | /// }; |
1259 | | /// |
1260 | | /// assert_eq!(be_f64(&[0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..]), Ok((&b""[..], 12.5))); |
1261 | | /// assert_eq!(be_f64(&b"abc"[..]), Err(Err::Incomplete(Needed::new(5)))); |
1262 | | /// |
1263 | | /// let le_f64 = |s| { |
1264 | | /// f64::<_, (_, ErrorKind)>(nom::number::Endianness::Little).parse(s) |
1265 | | /// }; |
1266 | | /// |
1267 | | /// assert_eq!(le_f64(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x40][..]), Ok((&b""[..], 12.5))); |
1268 | | /// assert_eq!(le_f64(&b"abc"[..]), Err(Err::Incomplete(Needed::new(5)))); |
1269 | | /// ``` |
1270 | | #[inline] |
1271 | 0 | pub fn f64<I, E: ParseError<I>>( |
1272 | 0 | endian: crate::number::Endianness, |
1273 | 0 | ) -> impl Parser<I, Output = f64, Error = E> |
1274 | 0 | where |
1275 | 0 | I: Input<Item = u8>, |
1276 | | { |
1277 | 0 | match endian { |
1278 | 0 | crate::number::Endianness::Big => Either::Left(be_f64()), |
1279 | 0 | crate::number::Endianness::Little => Either::Right(le_f64()), |
1280 | | #[cfg(target_endian = "big")] |
1281 | | crate::number::Endianness::Native => Either::Left(be_f64()), |
1282 | | #[cfg(target_endian = "little")] |
1283 | 0 | crate::number::Endianness::Native => Either::Right(le_f64()), |
1284 | | } |
1285 | 0 | } |
1286 | | |
1287 | | /// Recognizes a floating point number in text format and returns the corresponding part of the input. |
1288 | | /// |
1289 | | /// *Streaming version*: Will return `Err(nom::Err::Incomplete(_))` if it reaches the end of input. |
1290 | | /// |
1291 | | /// ```rust |
1292 | | /// # use nom::{Err, error::ErrorKind, Needed, Parser}; |
1293 | | /// use nom::number::recognize_float; |
1294 | | /// |
1295 | | /// let parser = |s| { |
1296 | | /// recognize_float().parse(s) |
1297 | | /// }; |
1298 | | /// |
1299 | | /// assert_eq!(parser("11e-1;"), Ok((";", "11e-1"))); |
1300 | | /// assert_eq!(parser("123E-02;"), Ok((";", "123E-02"))); |
1301 | | /// assert_eq!(parser("123K-01"), Ok(("K-01", "123"))); |
1302 | | /// assert_eq!(parser("abc"), Err(Err::Error(("abc", ErrorKind::Char)))); |
1303 | | /// ``` |
1304 | | #[rustfmt::skip] |
1305 | 0 | pub fn recognize_float<T, E:ParseError<T>>() -> impl Parser<T, Output=T,Error= E> |
1306 | 0 | where |
1307 | 0 | T: Clone + Offset, |
1308 | 0 | T: Input, |
1309 | 0 | <T as Input>::Item: AsChar, |
1310 | | { |
1311 | 0 | recognize(( |
1312 | 0 | opt(alt((char('+'), char('-')))), |
1313 | 0 | alt(( |
1314 | 0 | map((digit1(), opt(pair(char('.'), opt(digit1())))), |_| ()), |
1315 | 0 | map((char('.'), digit1()), |_| ()) |
1316 | | )), |
1317 | 0 | opt(( |
1318 | 0 | alt((char('e'), char('E'))), |
1319 | 0 | opt(alt((char('+'), char('-')))), |
1320 | 0 | cut(digit1()) |
1321 | 0 | )) |
1322 | | )) |
1323 | 0 | } |
1324 | | |
1325 | | /// float number text parser that also recognizes "nan", "infinity" and "inf" (case insensitive) |
1326 | 0 | pub fn recognize_float_or_exceptions<T, E: ParseError<T>>() -> impl Parser<T, Output = T, Error = E> |
1327 | 0 | where |
1328 | 0 | T: Clone + Offset, |
1329 | 0 | T: Input + Compare<&'static str>, |
1330 | 0 | <T as Input>::Item: AsChar, |
1331 | | { |
1332 | 0 | alt(( |
1333 | 0 | recognize_float::<_, E>(), |
1334 | 0 | |i: T| { |
1335 | 0 | crate::bytes::streaming::tag_no_case::<_, _, E>("nan")(i.clone()) |
1336 | 0 | .map_err(|_| crate::Err::Error(E::from_error_kind(i, ErrorKind::Float))) |
1337 | 0 | }, |
1338 | 0 | |i: T| { |
1339 | 0 | crate::bytes::streaming::tag_no_case::<_, _, E>("infinity")(i.clone()) |
1340 | 0 | .map_err(|_| crate::Err::Error(E::from_error_kind(i, ErrorKind::Float))) |
1341 | 0 | }, |
1342 | 0 | |i: T| { |
1343 | 0 | crate::bytes::streaming::tag_no_case::<_, _, E>("inf")(i.clone()) |
1344 | 0 | .map_err(|_| crate::Err::Error(E::from_error_kind(i, ErrorKind::Float))) |
1345 | 0 | }, |
1346 | | )) |
1347 | 0 | } |
1348 | | |
1349 | | /// single precision floating point number parser from text |
1350 | 0 | pub fn float<T, E: ParseError<T>>() -> impl Parser<T, Output = f32, Error = E> |
1351 | 0 | where |
1352 | 0 | T: Clone + Offset, |
1353 | 0 | T: Input + crate::traits::ParseTo<f32> + Compare<&'static str>, |
1354 | 0 | <T as Input>::Item: AsChar + Clone, |
1355 | 0 | T: AsBytes, |
1356 | 0 | T: for<'a> Compare<&'a [u8]>, |
1357 | | { |
1358 | 0 | Float { |
1359 | 0 | o: PhantomData, |
1360 | 0 | e: PhantomData, |
1361 | 0 | } |
1362 | 0 | } |
1363 | | |
1364 | | /// double precision floating point number parser from text |
1365 | 0 | pub fn double<T, E: ParseError<T>>() -> impl Parser<T, Output = f64, Error = E> |
1366 | 0 | where |
1367 | 0 | T: Clone + Offset, |
1368 | 0 | T: Input + crate::traits::ParseTo<f64> + Compare<&'static str>, |
1369 | 0 | <T as Input>::Item: AsChar + Clone, |
1370 | 0 | T: AsBytes, |
1371 | 0 | T: for<'a> Compare<&'a [u8]>, |
1372 | | { |
1373 | 0 | Float { |
1374 | 0 | o: PhantomData, |
1375 | 0 | e: PhantomData, |
1376 | 0 | } |
1377 | 0 | } |
1378 | | |
1379 | | /// f64 parser from text |
1380 | | struct Float<O, E> { |
1381 | | o: PhantomData<O>, |
1382 | | e: PhantomData<E>, |
1383 | | } |
1384 | | |
1385 | | impl<I, O, E: ParseError<I>> Parser<I> for Float<O, E> |
1386 | | where |
1387 | | I: Clone + Offset, |
1388 | | I: Input + crate::traits::ParseTo<O> + Compare<&'static str>, |
1389 | | <I as Input>::Item: AsChar + Clone, |
1390 | | I: AsBytes, |
1391 | | I: for<'a> Compare<&'a [u8]>, |
1392 | | { |
1393 | | type Output = O; |
1394 | | type Error = E; |
1395 | | |
1396 | 0 | fn process<OM: crate::OutputMode>( |
1397 | 0 | &mut self, |
1398 | 0 | input: I, |
1399 | 0 | ) -> crate::PResult<OM, I, Self::Output, Self::Error> { |
1400 | 0 | let (i, s) = |
1401 | 0 | recognize_float_or_exceptions().process::<OutputM<Emit, OM::Error, OM::Incomplete>>(input)?; |
1402 | | |
1403 | 0 | match s.parse_to() { |
1404 | 0 | Some(f) => Ok((i, OM::Output::bind(|| f))), |
1405 | 0 | None => Err(crate::Err::Error(OM::Error::bind(|| { |
1406 | 0 | E::from_error_kind(i, crate::error::ErrorKind::Float) |
1407 | 0 | }))), |
1408 | | } |
1409 | 0 | } |
1410 | | } |
1411 | | |
1412 | | #[cfg(test)] |
1413 | | #[cfg(feature = "std")] |
1414 | | mod tests { |
1415 | | use super::*; |
1416 | | use crate::error::ErrorKind; |
1417 | | use crate::internal::Err; |
1418 | | |
1419 | | macro_rules! assert_parse( |
1420 | | ($left: expr, $right: expr) => { |
1421 | | let res: $crate::IResult<_, _, (_, ErrorKind)> = $left; |
1422 | | assert_eq!(res, $right); |
1423 | | }; |
1424 | | ); |
1425 | | |
1426 | | #[test] |
1427 | | fn float_test() { |
1428 | | let mut test_cases = vec![ |
1429 | | "+3.14", |
1430 | | "3.14", |
1431 | | "-3.14", |
1432 | | "0", |
1433 | | "0.0", |
1434 | | "1.", |
1435 | | ".789", |
1436 | | "-.5", |
1437 | | "1e7", |
1438 | | "-1E-7", |
1439 | | ".3e-2", |
1440 | | "1.e4", |
1441 | | "1.2e4", |
1442 | | "12.34", |
1443 | | "-1.234E-12", |
1444 | | "-1.234e-12", |
1445 | | "0.00000000000000000087", |
1446 | | ]; |
1447 | | |
1448 | | for test in test_cases.drain(..) { |
1449 | | let expected32 = str::parse::<f32>(test).unwrap(); |
1450 | | let expected64 = str::parse::<f64>(test).unwrap(); |
1451 | | |
1452 | | println!("now parsing: {} -> {}", test, expected32); |
1453 | | |
1454 | | assert_parse!(recognize_float().parse_complete(test), Ok(("", test))); |
1455 | | |
1456 | | /*assert_parse!(float(test.as_bytes()), Ok((&b""[..], expected32))); |
1457 | | assert_parse!(float(test), Ok(("", expected32))); |
1458 | | */ |
1459 | | |
1460 | | assert_parse!( |
1461 | | double().parse_complete(test.as_bytes()), |
1462 | | Ok((&b""[..], expected64)) |
1463 | | ); |
1464 | | assert_parse!(double().parse_complete(test), Ok(("", expected64))); |
1465 | | } |
1466 | | |
1467 | | let remaining_exponent = "-1.234E-"; |
1468 | | assert_parse!( |
1469 | | recognize_float().parse_complete(remaining_exponent), |
1470 | | Err(Err::Failure(("", ErrorKind::Digit))) |
1471 | | ); |
1472 | | |
1473 | | /*let (_i, nan) = float::<_, ()>("NaN").unwrap(); |
1474 | | assert!(nan.is_nan()); |
1475 | | |
1476 | | let (_i, inf) = float::<_, ()>("inf").unwrap(); |
1477 | | assert!(inf.is_infinite()); |
1478 | | let (i, inf) = float::<_, ()>("infinity").unwrap(); |
1479 | | assert!(inf.is_infinite()); |
1480 | | assert!(i.is_empty());*/ |
1481 | | } |
1482 | | } |