Coverage Report

Created: 2025-10-21 06:31

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/combine-4.6.7/src/lib.rs
Line
Count
Source
1
//! This crate contains parser combinators, roughly based on the Haskell libraries
2
//! [parsec](http://hackage.haskell.org/package/parsec) and
3
//! [attoparsec](https://hackage.haskell.org/package/attoparsec).
4
//!
5
//! A parser in this library can be described as a function which takes some input and if it
6
//! is successful, returns a value together with the remaining input.
7
//! A parser combinator is a function which takes one or more parsers and returns a new parser.
8
//! For instance the [`many`] parser can be used to convert a parser for single digits into one that
9
//! parses multiple digits. By modeling parsers in this way it becomes easy to compose complex
10
//! parsers in an almost declarative way.
11
//!
12
//! # Overview
13
//!
14
//! `combine` limits itself to creating [LL(1) parsers](https://en.wikipedia.org/wiki/LL_parser)
15
//! (it is possible to opt-in to LL(k) parsing using the [`attempt`] combinator) which makes the
16
//! parsers easy to reason about in both function and performance while sacrificing
17
//! some generality. In addition to you being able to reason better about the parsers you
18
//! construct `combine` the library also takes the knowledge of being an LL parser and uses it to
19
//! automatically construct good error messages.
20
//!
21
//! ```rust
22
//! extern crate combine;
23
//! use combine::{Parser, EasyParser};
24
//! use combine::stream::position;
25
//! use combine::parser::char::{digit, letter};
26
//! const MSG: &'static str = r#"Parse error at line: 1, column: 1
27
//! Unexpected `|`
28
//! Expected digit or letter
29
//! "#;
30
//!
31
//! fn main() {
32
//!     // Wrapping a `&str` with `State` provides automatic line and column tracking. If `State`
33
//!     // was not used the positions would instead only be pointers into the `&str`
34
//!     if let Err(err) = digit().or(letter()).easy_parse(position::Stream::new("|")) {
35
//!         assert_eq!(MSG, format!("{}", err));
36
//!     }
37
//! }
38
//! ```
39
//!
40
//! This library is currently split into a few core modules:
41
//!
42
//! * [`parser`][mod parser] is where you will find all the parsers that combine provides. It contains the core
43
//! [`Parser`] trait as well as several submodules such as `sequence` or `choice` which each
44
//! contain several parsers aimed at a specific niche.
45
//!
46
//! * [`stream`] contains the second most important trait next to [`Parser`]. Streams represent the
47
//! data source which is being parsed such as `&[u8]`, `&str` or iterators.
48
//!
49
//! * [`easy`] contains combine's default "easy" error and stream handling. If you use the
50
//! `easy_parse` method to start your parsing these are the types that are used.
51
//!
52
//! * [`error`] contains the types and traits that make up combine's error handling. Unless you
53
//! need to customize the errors your parsers return you should not need to use this module much.
54
//!
55
//!
56
//! # Examples
57
//!
58
//! ```
59
//! extern crate combine;
60
//! use combine::parser::char::{spaces, digit, char};
61
//! use combine::{many1, sep_by, Parser, EasyParser};
62
//! use combine::stream::easy;
63
//!
64
//! fn main() {
65
//!     //Parse spaces first and use the with method to only keep the result of the next parser
66
//!     let integer = spaces()
67
//!         //parse a string of digits into an i32
68
//!         .with(many1(digit()).map(|string: String| string.parse::<i32>().unwrap()));
69
//!
70
//!     //Parse integers separated by commas, skipping whitespace
71
//!     let mut integer_list = sep_by(integer, spaces().skip(char(',')));
72
//!
73
//!     //Call parse with the input to execute the parser
74
//!     let input = "1234, 45,78";
75
//!     let result: Result<(Vec<i32>, &str), easy::ParseError<&str>> =
76
//!         integer_list.easy_parse(input);
77
//!     match result {
78
//!         Ok((value, _remaining_input)) => println!("{:?}", value),
79
//!         Err(err) => println!("{}", err)
80
//!     }
81
//! }
82
//! ```
83
//!
84
//! If we need a parser that is mutually recursive or if we want to export a reusable parser the
85
//! [`parser!`] macro can be used. In effect it makes it possible to return a parser without naming
86
//! the type of the parser (which can be very large due to combine's trait based approach). While
87
//! it is possible to do avoid naming the type without the macro those solutions require either
88
//! allocation (`Box<dyn Parser< Input, Output = O, PartialState = P>>`) or via `impl Trait` in the
89
//! return position. The macro thus threads the needle and makes it possible to have
90
//! non-allocating, anonymous parsers on stable rust.
91
//!
92
//! ```
93
//! #[macro_use]
94
//! extern crate combine;
95
//! use combine::parser::char::{char, letter, spaces};
96
//! use combine::{between, choice, many1, parser, sep_by, Parser, EasyParser};
97
//! use combine::error::{ParseError, StdParseResult};
98
//! use combine::stream::{Stream, Positioned};
99
//! use combine::stream::position;
100
//!
101
//! #[derive(Debug, PartialEq)]
102
//! pub enum Expr {
103
//!     Id(String),
104
//!     Array(Vec<Expr>),
105
//!     Pair(Box<Expr>, Box<Expr>)
106
//! }
107
//!
108
//! // `impl Parser` can be used to create reusable parsers with zero overhead
109
//! fn expr_<Input>() -> impl Parser< Input, Output = Expr>
110
//!     where Input: Stream<Token = char>,
111
//! {
112
//!     let word = many1(letter());
113
//!
114
//!     // A parser which skips past whitespace.
115
//!     // Since we aren't interested in knowing that our expression parser
116
//!     // could have accepted additional whitespace between the tokens we also silence the error.
117
//!     let skip_spaces = || spaces().silent();
118
//!
119
//!     //Creates a parser which parses a char and skips any trailing whitespace
120
//!     let lex_char = |c| char(c).skip(skip_spaces());
121
//!
122
//!     let comma_list = sep_by(expr(), lex_char(','));
123
//!     let array = between(lex_char('['), lex_char(']'), comma_list);
124
//!
125
//!     //We can use tuples to run several parsers in sequence
126
//!     //The resulting type is a tuple containing each parsers output
127
//!     let pair = (lex_char('('),
128
//!                 expr(),
129
//!                 lex_char(','),
130
//!                 expr(),
131
//!                 lex_char(')'))
132
//!                    .map(|t| Expr::Pair(Box::new(t.1), Box::new(t.3)));
133
//!
134
//!     choice((
135
//!         word.map(Expr::Id),
136
//!         array.map(Expr::Array),
137
//!         pair,
138
//!     ))
139
//!         .skip(skip_spaces())
140
//! }
141
//!
142
//! // As this expression parser needs to be able to call itself recursively `impl Parser` can't
143
//! // be used on its own as that would cause an infinitely large type. We can avoid this by using
144
//! // the `parser!` macro which erases the inner type and the size of that type entirely which
145
//! // lets it be used recursively.
146
//! //
147
//! // (This macro does not use `impl Trait` which means it can be used in rust < 1.26 as well to
148
//! // emulate `impl Parser`)
149
//! parser!{
150
//!     fn expr[Input]()(Input) -> Expr
151
//!     where [Input: Stream<Token = char>]
152
//!     {
153
//!         expr_()
154
//!     }
155
//! }
156
//!
157
//! fn main() {
158
//!     let result = expr()
159
//!         .parse("[[], (hello, world), [rust]]");
160
//!     let expr = Expr::Array(vec![
161
//!           Expr::Array(Vec::new())
162
//!         , Expr::Pair(Box::new(Expr::Id("hello".to_string())),
163
//!                      Box::new(Expr::Id("world".to_string())))
164
//!         , Expr::Array(vec![Expr::Id("rust".to_string())])
165
//!     ]);
166
//!     assert_eq!(result, Ok((expr, "")));
167
//! }
168
//! ```
169
//!
170
//! [`combinator`]: combinator/index.html
171
//! [mod parser]: parser/index.html
172
//! [`easy`]: easy/index.html
173
//! [`error`]: error/index.html
174
//! [`char`]: parser/char/index.html
175
//! [`byte`]: parser/byte/index.html
176
//! [`range`]: parser/range/index.html
177
//! [`many`]: parser/repeat/fn.many.html
178
//! [`attempt`]: parser/combinator/fn.attempt.html
179
//! [`satisfy`]: parser/token/fn.satisfy.html
180
//! [`or`]: parser/trait.Parser.html#method.or
181
//! [`Stream`]: stream/trait.Stream.html
182
//! [`RangeStream`]: stream/trait.RangeStream.html
183
//! [`Parser`]: parser/trait.Parser.html
184
//! [fn parser]: parser/function/fn.parser.html
185
//! [`parser!`]: macro.parser.html
186
// inline is only used on trivial functions returning parsers
187
#![allow(
188
    clippy::inline_always,
189
    clippy::type_complexity,
190
    clippy::too_many_arguments,
191
    clippy::match_like_matches_macro
192
)]
193
#![cfg_attr(not(feature = "std"), no_std)]
194
#![cfg_attr(docsrs, feature(doc_cfg))]
195
196
#[cfg(feature = "alloc")]
197
extern crate alloc;
198
199
#[doc(inline)]
200
pub use crate::error::{ParseError, ParseResult, StdParseResult};
201
202
#[cfg(feature = "std")]
203
#[doc(inline)]
204
pub use crate::parser::EasyParser;
205
206
#[doc(inline)]
207
pub use crate::parser::Parser;
208
209
#[doc(inline)]
210
pub use crate::stream::{Positioned, RangeStream, RangeStreamOnce, Stream, StreamOnce};
211
212
#[doc(inline)]
213
pub use crate::parser::{
214
    choice::optional,
215
    combinator::{attempt, look_ahead, not_followed_by},
216
    error::{unexpected, unexpected_any},
217
    function::parser,
218
    repeat::{
219
        chainl1, chainr1, count, count_min_max, many, many1, sep_by, sep_by1, sep_end_by,
220
        sep_end_by1, skip_count, skip_count_min_max, skip_many, skip_many1,
221
    },
222
    sequence::between,
223
    token::{
224
        any, eof, none_of, one_of, position, produce, satisfy, satisfy_map, token, tokens, value,
225
    },
226
};
227
228
#[doc(inline)]
229
pub use crate::parser::choice::choice;
230
231
#[doc(inline)]
232
pub use crate::parser::combinator::from_str;
233
234
#[doc(inline)]
235
pub use crate::parser::token::tokens_cmp;
236
237
/// Declares a named parser which can easily be reused.
238
///
239
/// The expression which creates the parser should have no side effects as it may be called
240
/// multiple times even during a single parse attempt.
241
///
242
/// NOTE: You can use `impl Trait` in the return position instead. See the [json parser][] for an
243
/// example.
244
///
245
/// [json parser]:https://github.com/Marwes/combine/blob/master/benches/json.rs
246
///
247
/// ```
248
/// #[macro_use]
249
/// extern crate combine;
250
/// use combine::parser::char::digit;
251
/// use combine::{any, choice, from_str, many1, Parser, EasyParser, Stream};
252
/// use combine::error::ParseError;
253
///
254
/// parser!{
255
///     /// `[Input]` represents a normal type parameters and lifetime declaration for the function
256
///     /// It gets expanded to `<Input>`
257
///     fn integer[Input]()(Input) -> i32
258
///     where [
259
///         Input: Stream<Token = char>,
260
///         <Input::Error as ParseError<Input::Token, Input::Range, Input::Position>>::StreamError:
261
///             From<::std::num::ParseIntError>,
262
///     ]
263
///     {
264
///         // The body must be a block body ( `{ <block body> }`) which ends with an expression
265
///         // which evaluates to a parser
266
///         from_str(many1::<String, _, _>(digit()))
267
///     }
268
/// }
269
///
270
/// #[derive(Debug, PartialEq)]
271
/// pub enum IntOrString {
272
///     Int(i32),
273
///     String(String),
274
/// }
275
/// // prefix with `pub` to declare a public parser
276
/// parser!{
277
///     // Documentation comments works as well
278
///
279
///     /// Parses an integer or a string (any characters)
280
///     pub fn integer_or_string[Input]()(Input) -> IntOrString
281
///     where [
282
///         Input: Stream<Token = char>,
283
///         <Input::Error as ParseError<Input::Token, Input::Range, Input::Position>>::StreamError:
284
///             From<::std::num::ParseIntError>,
285
///     ]
286
///     {
287
///         choice!(
288
///             integer().map(IntOrString::Int),
289
///             many1(any()).map(IntOrString::String)
290
///         )
291
///     }
292
/// }
293
///
294
/// parser!{
295
///     // Give the created type a unique name
296
///     #[derive(Clone)]
297
///     pub struct Twice;
298
///     pub fn twice[Input, F, P](f: F)(Input) -> (P::Output, P::Output)
299
///         where [P: Parser<Input>,
300
///                F: FnMut() -> P]
301
///     {
302
///         (f(), f())
303
///     }
304
/// }
305
///
306
/// fn main() {
307
///     assert_eq!(integer().easy_parse("123"), Ok((123, "")));
308
///     assert!(integer().easy_parse("!").is_err());
309
///
310
///     assert_eq!(
311
///         integer_or_string().easy_parse("123"),
312
///         Ok((IntOrString::Int(123), ""))
313
///     );
314
///     assert_eq!(
315
///         integer_or_string().easy_parse("abc"),
316
///         Ok((IntOrString::String("abc".to_string()), ""))
317
///     );
318
///     assert_eq!(twice(|| digit()).parse("123"), Ok((('1', '2'), "3")));
319
/// }
320
/// ```
321
#[macro_export]
322
macro_rules! parser {
323
    (
324
        type PartialState = $partial_state: ty;
325
        $(#[$attr:meta])*
326
        $fn_vis: vis fn $name: ident [$($type_params: tt)*]( $($arg: ident :  $arg_type: ty),*)
327
            ($input_type: ty) -> $output_type: ty
328
            where [$($where_clause: tt)*]
329
        $parser: block
330
    ) => {
331
        $crate::combine_parser_impl!{
332
            #[allow(non_camel_case_types)]
333
            #[doc(hidden)]
334
            $fn_vis struct $name;
335
            (type PartialState = ($partial_state);)
336
            $(#[$attr])*
337
            $fn_vis fn $name [$($type_params)*]($($arg : $arg_type),*)($input_type) -> $output_type
338
                where [$($where_clause)*]
339
            $parser
340
        }
341
    };
342
    (
343
        $(#[$derive:meta])*
344
        $struct_vis: vis struct $type_name: ident;
345
        type PartialState = $partial_state: ty;
346
        $(#[$attr:meta])*
347
        $fn_vis: vis fn $name: ident [$($type_params: tt)*]( $($arg: ident :  $arg_type: ty),* )
348
            ($input_type: ty) -> $output_type: ty
349
            where [$($where_clause: tt)*]
350
        $parser: block
351
    ) => {
352
        $crate::combine_parser_impl!{
353
            $(#[$derive])*
354
            $struct_vis struct $type_name;
355
            (type PartialState = ($partial_state);)
356
            $(#[$attr])*
357
            $fn_vis fn $name [$($type_params)*]($($arg : $arg_type),*)($input_type) -> $output_type
358
                where [$($where_clause)*]
359
            $parser
360
        }
361
    };
362
    (
363
        $(#[$attr:meta])*
364
        $fn_vis: vis fn $name: ident [$($type_params: tt)*]( $($arg: ident :  $arg_type: ty),*)
365
            ($input_type: ty) -> $output_type: ty
366
            where [$($where_clause: tt)*]
367
        $parser: block
368
    ) => {
369
        $crate::combine_parser_impl!{
370
            #[allow(non_camel_case_types)]
371
            #[doc(hidden)]
372
            $fn_vis struct $name;
373
            (type PartialState = (());)
374
            $(#[$attr])*
375
            $fn_vis fn $name [$($type_params)*]($($arg : $arg_type),*)($input_type) -> $output_type
376
                where [$($where_clause)*]
377
            $parser
378
        }
379
    };
380
    (
381
        $(#[$derive:meta])*
382
        $struct_vis: vis struct $type_name: ident;
383
        $(#[$attr:meta])*
384
        $fn_vis: vis fn $name: ident [$($type_params: tt)*]( $($arg: ident :  $arg_type: ty),* )
385
            ($input_type: ty) -> $output_type: ty
386
            where [$($where_clause: tt)*]
387
        $parser: block
388
    ) => {
389
        $crate::combine_parser_impl!{
390
            $(#[$derive])*
391
            $struct_vis struct $type_name;
392
            (type PartialState = (());)
393
            $(#[$attr])*
394
            $fn_vis fn $name [$($type_params)*]($($arg : $arg_type),*)($input_type) -> $output_type
395
                where [$($where_clause)*]
396
            $parser
397
        }
398
    };
399
}
400
401
#[doc(hidden)]
402
#[macro_export]
403
macro_rules! combine_parse_partial {
404
    ((()) $mode:ident $input:ident $state:ident $parser:block) => {{
405
        let _ = $state;
406
        let mut state = Default::default();
407
        let state = &mut state;
408
        $parser.parse_mode($mode, $input, state)
409
    }};
410
    (($ignored:ty) $mode:ident $input:ident $state:ident $parser:block) => {
411
        $parser.parse_mode($mode, $input, $state)
412
    };
413
}
414
415
#[doc(hidden)]
416
#[macro_export]
417
macro_rules! combine_parser_impl {
418
    (
419
        $(#[$derive:meta])*
420
        $struct_vis: vis struct $type_name: ident;
421
        (type PartialState = ($($partial_state: tt)*);)
422
        $(#[$attr:meta])*
423
        $fn_vis: vis fn $name: ident [$($type_params: tt)*]( $($arg: ident :  $arg_type: ty),*)
424
            ($input_type: ty) -> $output_type: ty
425
            where [$($where_clause: tt)*]
426
        $parser: block
427
    ) => {
428
429
        $(#[$derive])*
430
        $struct_vis struct $type_name<$($type_params)*>
431
            where <$input_type as $crate::stream::StreamOnce>::Error:
432
                $crate::error::ParseError<
433
                    <$input_type as $crate::stream::StreamOnce>::Token,
434
                    <$input_type as $crate::stream::StreamOnce>::Range,
435
                    <$input_type as $crate::stream::StreamOnce>::Position
436
                    >,
437
                $input_type: $crate::stream::Stream,
438
                $($where_clause)*
439
        {
440
            $(pub $arg : $arg_type,)*
441
            __marker: $crate::lib::marker::PhantomData<fn ($input_type) -> $output_type>
442
        }
443
444
        // We want this to work on older compilers, at least for a while
445
        #[allow(non_shorthand_field_patterns)]
446
        impl<$($type_params)*> $crate::Parser<$input_type> for $type_name<$($type_params)*>
447
            where <$input_type as $crate::stream::StreamOnce>::Error:
448
                    $crate::error::ParseError<
449
                        <$input_type as $crate::stream::StreamOnce>::Token,
450
                        <$input_type as $crate::stream::StreamOnce>::Range,
451
                        <$input_type as $crate::stream::StreamOnce>::Position
452
                        >,
453
                $input_type: $crate::stream::Stream,
454
                $($where_clause)*
455
        {
456
457
            type Output = $output_type;
458
            type PartialState = $($partial_state)*;
459
460
            $crate::parse_mode!($input_type);
461
            #[inline]
462
12.3M
            fn parse_mode_impl<M>(
463
12.3M
                &mut self,
464
12.3M
                mode: M,
465
12.3M
                input: &mut $input_type,
466
12.3M
                state: &mut Self::PartialState,
467
12.3M
                ) -> $crate::error::ParseResult<$output_type, <$input_type as $crate::stream::StreamOnce>::Error>
468
12.3M
            where M: $crate::parser::ParseMode
469
            {
470
12.3M
                let $type_name { $( $arg: ref mut $arg,)* .. } = *self;
471
12.3M
                $crate::combine_parse_partial!(($($partial_state)*) mode input state $parser)
472
12.3M
            }
<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parse_mode_impl::<combine::parser::PartialMode>
Line
Count
Source
462
101k
            fn parse_mode_impl<M>(
463
101k
                &mut self,
464
101k
                mode: M,
465
101k
                input: &mut $input_type,
466
101k
                state: &mut Self::PartialState,
467
101k
                ) -> $crate::error::ParseResult<$output_type, <$input_type as $crate::stream::StreamOnce>::Error>
468
101k
            where M: $crate::parser::ParseMode
469
            {
470
101k
                let $type_name { $( $arg: ref mut $arg,)* .. } = *self;
471
101k
                $crate::combine_parse_partial!(($($partial_state)*) mode input state $parser)
472
101k
            }
<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parse_mode_impl::<combine::parser::FirstMode>
Line
Count
Source
462
6.05M
            fn parse_mode_impl<M>(
463
6.05M
                &mut self,
464
6.05M
                mode: M,
465
6.05M
                input: &mut $input_type,
466
6.05M
                state: &mut Self::PartialState,
467
6.05M
                ) -> $crate::error::ParseResult<$output_type, <$input_type as $crate::stream::StreamOnce>::Error>
468
6.05M
            where M: $crate::parser::ParseMode
469
            {
470
6.05M
                let $type_name { $( $arg: ref mut $arg,)* .. } = *self;
471
6.05M
                $crate::combine_parse_partial!(($($partial_state)*) mode input state $parser)
472
6.05M
            }
<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parse_mode_impl::<combine::parser::PartialMode>
Line
Count
Source
462
101k
            fn parse_mode_impl<M>(
463
101k
                &mut self,
464
101k
                mode: M,
465
101k
                input: &mut $input_type,
466
101k
                state: &mut Self::PartialState,
467
101k
                ) -> $crate::error::ParseResult<$output_type, <$input_type as $crate::stream::StreamOnce>::Error>
468
101k
            where M: $crate::parser::ParseMode
469
            {
470
101k
                let $type_name { $( $arg: ref mut $arg,)* .. } = *self;
471
101k
                $crate::combine_parse_partial!(($($partial_state)*) mode input state $parser)
472
101k
            }
<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parse_mode_impl::<combine::parser::FirstMode>
Line
Count
Source
462
6.05M
            fn parse_mode_impl<M>(
463
6.05M
                &mut self,
464
6.05M
                mode: M,
465
6.05M
                input: &mut $input_type,
466
6.05M
                state: &mut Self::PartialState,
467
6.05M
                ) -> $crate::error::ParseResult<$output_type, <$input_type as $crate::stream::StreamOnce>::Error>
468
6.05M
            where M: $crate::parser::ParseMode
469
            {
470
6.05M
                let $type_name { $( $arg: ref mut $arg,)* .. } = *self;
471
6.05M
                $crate::combine_parse_partial!(($($partial_state)*) mode input state $parser)
472
6.05M
            }
Unexecuted instantiation: <combine::parser::combinator::FromStr<_, _, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::byte::bytes<_> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte<_> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte2<_> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte3<_> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::byte::take_until_bytes<_> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::byte::bytes_cmp<_, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::char::Digit<_> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::range::Recognize<_, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::range::length_prefix<_, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::repeat::SkipUntil<_, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::repeat::SkipRepeatUntil<_, _, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::repeat::Count<_, _, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::repeat::SkipCount<_, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::repeat::SkipCountMinMax<_, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::repeat::SkipMany<_, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::repeat::SkipMany1<_, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
Unexecuted instantiation: <combine::parser::sequence::Between<_, _, _, _> as combine::parser::Parser<_>>::parse_mode_impl::<_>
473
474
            #[inline]
475
1.67k
            fn add_error(
476
1.67k
                &mut self,
477
1.67k
                errors: &mut $crate::error::Tracked<
478
1.67k
                    <$input_type as $crate::stream::StreamOnce>::Error
479
1.67k
                    >)
480
            {
481
1.67k
                let $type_name { $( $arg : ref mut $arg,)*  .. } = *self;
482
1.67k
                let mut parser = $parser;
483
1.67k
                {
484
1.67k
                    let _: &mut dyn $crate::Parser< $input_type, Output = $output_type, PartialState = _> = &mut parser;
485
1.67k
                }
486
1.67k
                parser.add_error(errors)
487
1.67k
            }
<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
475
835
            fn add_error(
476
835
                &mut self,
477
835
                errors: &mut $crate::error::Tracked<
478
835
                    <$input_type as $crate::stream::StreamOnce>::Error
479
835
                    >)
480
            {
481
835
                let $type_name { $( $arg : ref mut $arg,)*  .. } = *self;
482
835
                let mut parser = $parser;
483
835
                {
484
835
                    let _: &mut dyn $crate::Parser< $input_type, Output = $output_type, PartialState = _> = &mut parser;
485
835
                }
486
835
                parser.add_error(errors)
487
835
            }
<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
475
835
            fn add_error(
476
835
                &mut self,
477
835
                errors: &mut $crate::error::Tracked<
478
835
                    <$input_type as $crate::stream::StreamOnce>::Error
479
835
                    >)
480
            {
481
835
                let $type_name { $( $arg : ref mut $arg,)*  .. } = *self;
482
835
                let mut parser = $parser;
483
835
                {
484
835
                    let _: &mut dyn $crate::Parser< $input_type, Output = $output_type, PartialState = _> = &mut parser;
485
835
                }
486
835
                parser.add_error(errors)
487
835
            }
Unexecuted instantiation: <combine::parser::combinator::FromStr<_, _, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::byte::bytes<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte2<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte3<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::byte::take_until_bytes<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::byte::bytes_cmp<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::char::Digit<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::range::Recognize<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::range::length_prefix<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::SkipUntil<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::SkipRepeatUntil<_, _, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::Count<_, _, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::SkipCount<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::SkipCountMinMax<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::SkipMany<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::SkipMany1<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::sequence::Between<_, _, _, _> as combine::parser::Parser<_>>::add_error
488
489
0
            fn add_committed_expected_error(
490
0
                &mut self,
491
0
                errors: &mut $crate::error::Tracked<
492
0
                    <$input_type as $crate::stream::StreamOnce>::Error
493
0
                    >)
494
            {
495
0
                let $type_name { $( $arg : ref mut $arg,)*  .. } = *self;
496
0
                let mut parser = $parser;
497
0
                {
498
0
                    let _: &mut dyn $crate::Parser< $input_type, Output = $output_type, PartialState = _> = &mut parser;
499
0
                }
500
0
                parser.add_committed_expected_error(errors)
501
0
            }
Unexecuted instantiation: <combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::FromStr<_, _, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::byte::bytes<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte2<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::byte::TakeUntilByte3<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::byte::take_until_bytes<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::byte::bytes_cmp<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::char::Digit<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::range::Recognize<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::range::length_prefix<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::repeat::SkipUntil<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::repeat::SkipRepeatUntil<_, _, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::repeat::Count<_, _, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::repeat::SkipCount<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::repeat::SkipCountMinMax<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::repeat::SkipMany<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::repeat::SkipMany1<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::sequence::Between<_, _, _, _> as combine::parser::Parser<_>>::add_committed_expected_error
502
        }
503
504
        $(#[$attr])*
505
        #[inline]
506
13.5M
        $fn_vis fn $name< $($type_params)* >(
507
                $($arg : $arg_type),*
508
            ) -> $type_name<$($type_params)*>
509
            where <$input_type as $crate::stream::StreamOnce>::Error:
510
                    $crate::error::ParseError<
511
                        <$input_type as $crate::stream::StreamOnce>::Token,
512
                        <$input_type as $crate::stream::StreamOnce>::Range,
513
                        <$input_type as $crate::stream::StreamOnce>::Position
514
                        >,
515
                $input_type: $crate::stream::Stream,
516
                $($where_clause)*
517
        {
518
13.5M
            $type_name {
519
13.5M
                $($arg,)*
520
13.5M
                __marker: $crate::lib::marker::PhantomData
521
13.5M
            }
522
13.5M
        }
combine::parser::range::recognize::<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>
Line
Count
Source
506
6.78M
        $fn_vis fn $name< $($type_params)* >(
507
                $($arg : $arg_type),*
508
            ) -> $type_name<$($type_params)*>
509
            where <$input_type as $crate::stream::StreamOnce>::Error:
510
                    $crate::error::ParseError<
511
                        <$input_type as $crate::stream::StreamOnce>::Token,
512
                        <$input_type as $crate::stream::StreamOnce>::Range,
513
                        <$input_type as $crate::stream::StreamOnce>::Position
514
                        >,
515
                $input_type: $crate::stream::Stream,
516
                $($where_clause)*
517
        {
518
6.78M
            $type_name {
519
6.78M
                $($arg,)*
520
6.78M
                __marker: $crate::lib::marker::PhantomData
521
6.78M
            }
522
6.78M
        }
combine::parser::byte::take_until_bytes::<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>
Line
Count
Source
506
6.78M
        $fn_vis fn $name< $($type_params)* >(
507
                $($arg : $arg_type),*
508
            ) -> $type_name<$($type_params)*>
509
            where <$input_type as $crate::stream::StreamOnce>::Error:
510
                    $crate::error::ParseError<
511
                        <$input_type as $crate::stream::StreamOnce>::Token,
512
                        <$input_type as $crate::stream::StreamOnce>::Range,
513
                        <$input_type as $crate::stream::StreamOnce>::Position
514
                        >,
515
                $input_type: $crate::stream::Stream,
516
                $($where_clause)*
517
        {
518
6.78M
            $type_name {
519
6.78M
                $($arg,)*
520
6.78M
                __marker: $crate::lib::marker::PhantomData
521
6.78M
            }
522
6.78M
        }
Unexecuted instantiation: combine::parser::combinator::from_str::<_, _, _>
Unexecuted instantiation: combine::parser::byte::take_until_byte::<_>
Unexecuted instantiation: combine::parser::byte::take_until_byte2::<_>
Unexecuted instantiation: combine::parser::byte::take_until_byte3::<_>
Unexecuted instantiation: combine::parser::byte::take_until_bytes::<_>
Unexecuted instantiation: combine::parser::byte::bytes::<_>
Unexecuted instantiation: combine::parser::byte::bytes_cmp::<_, _>
Unexecuted instantiation: combine::parser::char::digit::<_>
Unexecuted instantiation: combine::parser::range::length_prefix::<_, _>
Unexecuted instantiation: combine::parser::range::recognize::<_, _>
Unexecuted instantiation: combine::parser::repeat::skip_count::<_, _>
Unexecuted instantiation: combine::parser::repeat::skip_many1::<_, _>
Unexecuted instantiation: combine::parser::repeat::skip_until::<_, _>
Unexecuted instantiation: combine::parser::repeat::repeat_skip_until::<_, _, _>
Unexecuted instantiation: combine::parser::repeat::skip_count_min_max::<_, _>
Unexecuted instantiation: combine::parser::repeat::count::<_, _, _>
Unexecuted instantiation: combine::parser::repeat::skip_many::<_, _>
Unexecuted instantiation: combine::parser::sequence::between::<_, _, _, _>
523
    };
524
}
525
526
/// Internal API. May break without a semver bump
527
macro_rules! forward_parser {
528
    ($input: ty, $method: ident $( $methods: ident)*, $($field: tt)*) => {
529
        forward_parser!($input, $method $($field)+);
530
        forward_parser!($input, $($methods)*, $($field)+);
531
    };
532
    ($input: ty, parse_mode $($field: tt)+) => {
533
        #[inline]
534
        fn parse_mode_impl<M>(
535
            &mut self,
536
            mode: M,
537
            input: &mut $input,
538
            state: &mut Self::PartialState,
539
        ) -> ParseResult<Self::Output, <$input as $crate::StreamOnce>::Error>
540
        where
541
            M: ParseMode,
542
        {
543
            self.$($field)+.parse_mode(mode, input, state).map(|(a, _)| a)
544
        }
545
    };
546
    ($input: ty, parse_lazy $($field: tt)+) => {
547
        fn parse_lazy(
548
            &mut self,
549
            input: &mut $input,
550
        ) -> ParseResult<Self::Output, <$input as $crate::StreamOnce>::Error> {
551
            self.$($field)+.parse_lazy(input)
552
        }
553
    };
554
    ($input: ty, parse_first $($field: tt)+) => {
555
        fn parse_first(
556
            &mut self,
557
            input: &mut $input,
558
            state: &mut Self::PartialState,
559
        ) -> ParseResult<Self::Output, <$input as $crate::StreamOnce>::Error> {
560
            self.$($field)+.parse_first(input, state)
561
        }
562
    };
563
    ($input: ty, parse_partial $($field: tt)+) => {
564
        fn parse_partial(
565
            &mut self,
566
            input: &mut $input,
567
            state: &mut Self::PartialState,
568
        ) -> ParseResult<Self::Output, <$input as $crate::StreamOnce>::Error> {
569
            self.$($field)+.parse_partial(input, state)
570
        }
571
    };
572
    ($input: ty, add_error $($field: tt)+) => {
573
574
11.1k
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
11.1k
            self.$($field)+.add_error(error)
576
11.1k
        }
<combine::parser::combinator::Map<combine::parser::combinator::Map<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::err_parser>, redis::types::Value::ServerError> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
48
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
48
            self.$($field)+.add_error(error)
576
48
        }
<combine::parser::combinator::Map<combine::parser::combinator::Map<combine::parser::sequence::ThenPartial<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#2}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#4}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#14}::{closure#0}>, redis::types::Value::ServerError> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
41
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
41
            self.$($field)+.add_error(error)
576
41
        }
<combine::parser::combinator::Map<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#2}::{closure#0}>, redis::types::Value::Int> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
29
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
29
            self.$($field)+.add_error(error)
576
29
        }
<combine::parser::combinator::Map<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#12}::{closure#0}>, redis::types::Value::Double> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
30
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
30
            self.$($field)+.add_error(error)
576
30
        }
<combine::parser::combinator::Map<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#13}::{closure#0}>, redis::types::Value::Boolean> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
28
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
28
            self.$($field)+.add_error(error)
576
28
        }
<combine::parser::combinator::Map<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#11}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
27
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
27
            self.$($field)+.add_error(error)
576
27
        }
<combine::parser::combinator::Map<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#1}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
51
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
51
            self.$($field)+.add_error(error)
576
51
        }
<combine::parser::combinator::Map<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::err_parser> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
48
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
48
            self.$($field)+.add_error(error)
576
48
        }
<combine::parser::combinator::Map<combine::parser::range::RecognizeWithValue<&mut combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, <combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
835
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
835
            self.$($field)+.add_error(error)
576
835
        }
Unexecuted instantiation: <combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#3}::{closure#0}::{closure#1}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
298
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
298
            self.$($field)+.add_error(error)
576
298
        }
<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#4}::{closure#0}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
321
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
321
            self.$($field)+.add_error(error)
576
321
        }
<combine::parser::combinator::Map<combine::parser::repeat::CountMinMax<alloc::vec::Vec<redis::types::Value>, combine::parser::combinator::Opaque<redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}, combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, redis::types::Value, combine::parser::combinator::AnySendSyncPartialState>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#7}::{closure#0}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
593
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
593
            self.$($field)+.add_error(error)
576
593
        }
<combine::parser::combinator::Map<combine::parser::repeat::CountMinMax<alloc::vec::Vec<redis::types::Value>, combine::parser::combinator::Opaque<redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}, combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, redis::types::Value, combine::parser::combinator::AnySendSyncPartialState>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#8}::{closure#0}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
467
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
467
            self.$($field)+.add_error(error)
576
467
        }
<combine::parser::combinator::Map<combine::parser::repeat::CountMinMax<alloc::vec::Vec<redis::types::Value>, combine::parser::combinator::Opaque<redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}, combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, redis::types::Value, combine::parser::combinator::AnySendSyncPartialState>>, redis::types::Value::Set> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
201
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
201
            self.$($field)+.add_error(error)
576
201
        }
<combine::parser::combinator::Map<combine::parser::repeat::CountMinMax<alloc::vec::Vec<redis::types::Value>, combine::parser::combinator::Opaque<redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}, combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, redis::types::Value, combine::parser::combinator::AnySendSyncPartialState>>, redis::types::Value::Array> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
475
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
475
            self.$($field)+.add_error(error)
576
475
        }
<combine::parser::combinator::Map<combine::parser::sequence::ThenPartial<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#2}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#4}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#14}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
41
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
41
            self.$($field)+.add_error(error)
576
41
        }
<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#2}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
621
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
621
            self.$($field)+.add_error(error)
576
621
        }
<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#12}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
30
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
30
            self.$($field)+.add_error(error)
576
30
        }
<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#13}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
28
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
28
            self.$($field)+.add_error(error)
576
28
        }
<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#16}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
30
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
30
            self.$($field)+.add_error(error)
576
30
        }
<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
835
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
835
            self.$($field)+.add_error(error)
576
835
        }
<combine::parser::combinator::AndThen<combine::parser::repeat::CountMinMax<alloc::vec::Vec<redis::types::Value>, combine::parser::combinator::Opaque<redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}, combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, redis::types::Value, combine::parser::combinator::AnySendSyncPartialState>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#10}::{closure#0}::{closure#1}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
204
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
204
            self.$($field)+.add_error(error)
576
204
        }
<combine::parser::combinator::AndThen<combine::parser::sequence::ThenPartial<combine::parser::combinator::AndThen<combine::parser::combinator::AndThen<combine::parser::range::Recognize<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#1}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#2}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#4}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#15}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
31
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
31
            self.$($field)+.add_error(error)
576
31
        }
<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
391
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
391
            self.$($field)+.add_error(error)
576
391
        }
<combine::parser::combinator::Ignore<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
835
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
835
            self.$($field)+.add_error(error)
576
835
        }
<combine::parser::combinator::Ignore<combine::parser::error::Expected<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>>, &str>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
391
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
391
            self.$($field)+.add_error(error)
576
391
        }
<combine::parser::combinator::Ignore<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
391
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
391
            self.$($field)+.add_error(error)
576
391
        }
<combine::parser::combinator::AnySendSyncPartialStateParser<combine::parser::sequence::ThenPartial<combine::parser::sequence::ThenPartial<combine::parser::token::Any<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
1.95k
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
1.95k
            self.$($field)+.add_error(error)
576
1.95k
        }
<combine::parser::sequence::With<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
835
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
835
            self.$($field)+.add_error(error)
576
835
        }
<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
391
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
391
            self.$($field)+.add_error(error)
576
391
        }
<combine::parser::sequence::Skip<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#3}::{closure#0}::{closure#1}>, combine::parser::error::Expected<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>>, &str>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
298
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
298
            self.$($field)+.add_error(error)
576
298
        }
<combine::parser::sequence::Skip<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#4}::{closure#0}::{closure#0}>, combine::parser::error::Expected<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>>, &str>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_error
Line
Count
Source
574
321
        fn add_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
575
321
            self.$($field)+.add_error(error)
576
321
        }
Unexecuted instantiation: <combine::parser::combinator::LookAhead<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::Map<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::MapInput<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::FlatMap<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::AndThen<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::NoPartial<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::Ignore<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::Try<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::AnyPartialStateParser<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::AnySendPartialStateParser<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::AnySendSyncPartialStateParser<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::combinator::Spanned<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::choice::Optional<_> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::Many1<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::SepBy<_, _, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::repeat::SepBy1<_, _, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::sequence::With<_, _> as combine::parser::Parser<_>>::add_error
Unexecuted instantiation: <combine::parser::sequence::Skip<_, _> as combine::parser::Parser<_>>::add_error
577
    };
578
    ($input: ty, add_committed_expected_error $($field: tt)+) => {
579
221
        fn add_committed_expected_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
580
221
            self.$($field)+.add_committed_expected_error(error)
581
221
        }
Unexecuted instantiation: <combine::parser::error::Expected<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>>, &str> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#3}::{closure#0}::{closure#1}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Line
Count
Source
579
73
        fn add_committed_expected_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
580
73
            self.$($field)+.add_committed_expected_error(error)
581
73
        }
<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#4}::{closure#0}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Line
Count
Source
579
75
        fn add_committed_expected_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
580
75
            self.$($field)+.add_committed_expected_error(error)
581
75
        }
Unexecuted instantiation: <combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::Ignore<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::Ignore<combine::parser::error::Expected<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>>, &str>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
<combine::parser::combinator::Ignore<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Line
Count
Source
579
73
        fn add_committed_expected_error(&mut self, error: &mut $crate::error::Tracked<<$input as $crate::StreamOnce>::Error>) {
580
73
            self.$($field)+.add_committed_expected_error(error)
581
73
        }
Unexecuted instantiation: <combine::parser::combinator::AnySendSyncPartialStateParser<combine::parser::sequence::ThenPartial<combine::parser::sequence::ThenPartial<combine::parser::token::Any<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::LookAhead<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::Map<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::MapInput<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::FlatMap<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::AndThen<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::NoPartial<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::Ignore<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::Try<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::AnyPartialStateParser<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::AnySendPartialStateParser<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::AnySendSyncPartialStateParser<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::combinator::Spanned<_> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::error::Expected<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::error::Message<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::sequence::With<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
Unexecuted instantiation: <combine::parser::sequence::Skip<_, _> as combine::parser::Parser<_>>::add_committed_expected_error
582
    };
583
    ($input: ty, parser_count $($field: tt)+) => {
584
13.0M
        fn parser_count(&self) -> $crate::ErrorOffset {
585
13.0M
            self.$($field)+.parser_count()
586
13.0M
        }
<combine::parser::error::Expected<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>>, &str> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
104k
        fn parser_count(&self) -> $crate::ErrorOffset {
585
104k
            self.$($field)+.parser_count()
586
104k
        }
<combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
208k
        fn parser_count(&self) -> $crate::ErrorOffset {
585
208k
            self.$($field)+.parser_count()
586
208k
        }
<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#0}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
6.05M
        fn parser_count(&self) -> $crate::ErrorOffset {
585
6.05M
            self.$($field)+.parser_count()
586
6.05M
        }
<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#3}::{closure#0}::{closure#1}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
44.6k
        fn parser_count(&self) -> $crate::ErrorOffset {
585
44.6k
            self.$($field)+.parser_count()
586
44.6k
        }
<combine::parser::combinator::Map<combine::parser::range::Take<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}::{closure#4}::{closure#0}::{closure#0}> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
60.3k
        fn parser_count(&self) -> $crate::ErrorOffset {
585
60.3k
            self.$($field)+.parser_count()
586
60.3k
        }
<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
104k
        fn parser_count(&self) -> $crate::ErrorOffset {
585
104k
            self.$($field)+.parser_count()
586
104k
        }
<combine::parser::combinator::Ignore<combine::parser::byte::take_until_bytes<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
6.05M
        fn parser_count(&self) -> $crate::ErrorOffset {
585
6.05M
            self.$($field)+.parser_count()
586
6.05M
        }
<combine::parser::combinator::Ignore<combine::parser::error::Expected<combine::parser::combinator::NoPartial<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>>>, &str>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
104k
        fn parser_count(&self) -> $crate::ErrorOffset {
585
104k
            self.$($field)+.parser_count()
586
104k
        }
<combine::parser::combinator::Ignore<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
209k
        fn parser_count(&self) -> $crate::ErrorOffset {
585
209k
            self.$($field)+.parser_count()
586
209k
        }
Unexecuted instantiation: <combine::parser::combinator::AnySendSyncPartialStateParser<combine::parser::sequence::ThenPartial<combine::parser::sequence::ThenPartial<combine::parser::token::Any<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#0}>, redis::parser::value<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}::{closure#1}>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
<combine::parser::sequence::With<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::crlf<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, combine::parser::error::Expected<combine::parser::token::Satisfy<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>, combine::parser::byte::newline<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>::{closure#0}>, &str>> as combine::parser::Parser<combine::stream::easy::Stream<combine::stream::MaybePartialStream<&[u8]>>>>::parser_count
Line
Count
Source
584
104k
        fn parser_count(&self) -> $crate::ErrorOffset {
585
104k
            self.$($field)+.parser_count()
586
104k
        }
Unexecuted instantiation: <combine::parser::combinator::NotFollowedBy<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::LookAhead<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::Map<_, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::MapInput<_, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::FlatMap<_, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::AndThen<_, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::NoPartial<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::Ignore<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::Try<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::AnyPartialStateParser<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::AnySendPartialStateParser<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::combinator::AnySendSyncPartialStateParser<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::error::Expected<_, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::error::Silent<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::error::Message<_, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::choice::Optional<_> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::repeat::Many1<_, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::repeat::SepBy<_, _, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::repeat::SepBy1<_, _, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::sequence::With<_, _> as combine::parser::Parser<_>>::parser_count
Unexecuted instantiation: <combine::parser::sequence::Skip<_, _> as combine::parser::Parser<_>>::parser_count
587
    };
588
    ($input: ty, $field: tt) => {
589
        forward_parser!($input, parse_lazy parse_first parse_partial add_error add_committed_expected_error parser_count, $field);
590
    };
591
    ($input: ty, $($field: tt)+) => {
592
    };
593
}
594
595
// Facade over the core types we need
596
// Public but hidden to be accessible in macros
597
#[doc(hidden)]
598
pub mod lib {
599
    #[cfg(not(feature = "std"))]
600
    pub use core::*;
601
602
    #[cfg(feature = "std")]
603
    pub use std::*;
604
}
605
606
#[cfg(feature = "std")]
607
#[doc(inline)]
608
pub use crate::stream::easy;
609
610
/// Error types and traits which define what kind of errors combine parsers may emit
611
#[macro_use]
612
pub mod error;
613
#[macro_use]
614
pub mod stream;
615
#[macro_use]
616
pub mod parser;
617
618
#[cfg(feature = "futures-core-03")]
619
pub mod future_ext;
620
621
#[doc(hidden)]
622
#[derive(Clone, PartialOrd, PartialEq, Debug, Copy)]
623
pub struct ErrorOffset(u8);
624
625
#[cfg(test)]
626
mod tests {
627
628
    use crate::parser::char::{char, string};
629
630
    use super::*;
631
632
    #[test]
633
    fn chainl1_error_consume() {
634
        fn first<T, U>(t: T, _: U) -> T {
635
            t
636
        }
637
        let mut p = chainl1(string("abc"), char(',').map(|_| first));
638
        assert!(p.parse("abc,ab").is_err());
639
    }
640
641
    #[test]
642
    fn choice_strings() {
643
        let mut fruits = [
644
            attempt(string("Apple")),
645
            attempt(string("Banana")),
646
            attempt(string("Cherry")),
647
            attempt(string("Date")),
648
            attempt(string("Fig")),
649
            attempt(string("Grape")),
650
        ];
651
        let mut parser = choice(&mut fruits);
652
        assert_eq!(parser.parse("Apple"), Ok(("Apple", "")));
653
        assert_eq!(parser.parse("Banana"), Ok(("Banana", "")));
654
        assert_eq!(parser.parse("Cherry"), Ok(("Cherry", "")));
655
        assert_eq!(parser.parse("DateABC"), Ok(("Date", "ABC")));
656
        assert_eq!(parser.parse("Fig123"), Ok(("Fig", "123")));
657
        assert_eq!(parser.parse("GrapeApple"), Ok(("Grape", "Apple")));
658
    }
659
}
660
661
#[cfg(all(feature = "std", test))]
662
mod std_tests {
663
664
    use crate::{
665
        error::StdParseResult,
666
        parser::char::{alpha_num, char, digit, letter, spaces, string},
667
        stream::{
668
            easy,
669
            position::{self, SourcePosition},
670
        },
671
    };
672
673
    use super::{easy::Error, error::Commit, stream::IteratorStream, *};
674
675
    #[test]
676
    fn optional_error_consume() {
677
        let mut p = optional(string("abc"));
678
        let err = p.easy_parse(position::Stream::new("ab")).unwrap_err();
679
        assert_eq!(err.position, SourcePosition { line: 1, column: 1 });
680
    }
681
682
    fn follow<Input>(input: &mut Input) -> StdParseResult<(), Input>
683
    where
684
        Input: Stream<Token = char, Error = easy::ParseError<Input>>,
685
        Input::Position: Default,
686
        Input::Error: std::fmt::Debug,
687
        Input::Token: PartialEq,
688
        Input::Range: PartialEq,
689
    {
690
        let before = input.checkpoint();
691
        match input.uncons() {
692
            Ok(c) => {
693
                if c.is_alphanumeric() {
694
                    input.reset(before).unwrap();
695
                    let e = Error::Unexpected(c.into());
696
                    Err(Commit::Peek(easy::Errors::new(input.position(), e).into()))
697
                } else {
698
                    Ok(((), Commit::Peek(())))
699
                }
700
            }
701
            Err(_) => Ok(((), Commit::Peek(()))),
702
        }
703
    }
704
705
    fn integer<Input>(input: &mut Input) -> StdParseResult<i64, Input>
706
    where
707
        Input: Stream<Token = char>,
708
    {
709
        let (s, input) = many1::<String, _, _>(digit())
710
            .expected("integer")
711
            .parse_stream(input)
712
            .into_result()?;
713
        let mut n = 0;
714
        for c in s.chars() {
715
            n = n * 10 + (c as i64 - '0' as i64);
716
        }
717
        Ok((n, input))
718
    }
719
720
    #[test]
721
    fn test_integer() {
722
        let result = parser(integer).parse("123");
723
        assert_eq!(result, Ok((123i64, "")));
724
    }
725
    #[test]
726
    fn list() {
727
        let mut p = sep_by(parser(integer), char(','));
728
        let result = p.parse("123,4,56");
729
        assert_eq!(result, Ok((vec![123i64, 4, 56], "")));
730
    }
731
732
    #[test]
733
    fn iterator() {
734
        let result = parser(integer)
735
            .parse(position::Stream::new(IteratorStream::new("123".chars())))
736
            .map(|(i, mut input)| (i, input.uncons().is_err()));
737
        assert_eq!(result, Ok((123i64, true)));
738
    }
739
740
    #[test]
741
    fn field() {
742
        let word = || many(alpha_num());
743
        let c_decl = (word(), spaces(), char(':'), spaces(), word())
744
            .map(|t| (t.0, t.4))
745
            .parse("x: int");
746
        assert_eq!(c_decl, Ok((("x".to_string(), "int".to_string()), "")));
747
    }
748
749
    #[test]
750
    fn source_position() {
751
        let source = r"
752
123
753
";
754
        let mut parsed_state = position::Stream::with_positioner(source, SourcePosition::new());
755
        let result = (spaces(), parser(integer), spaces())
756
            .map(|t| t.1)
757
            .parse_stream(&mut parsed_state)
758
            .into_result();
759
        let state = Commit::Commit(position::Stream {
760
            positioner: SourcePosition { line: 3, column: 1 },
761
            input: "",
762
        });
763
        assert_eq!(
764
            result.map(|(x, c)| (x, c.map(|_| parsed_state))),
765
            Ok((123i64, state))
766
        );
767
    }
768
769
    #[derive(Debug, PartialEq)]
770
    pub enum Expr {
771
        Id(String),
772
        Int(i64),
773
        Array(Vec<Expr>),
774
        Plus(Box<Expr>, Box<Expr>),
775
        Times(Box<Expr>, Box<Expr>),
776
    }
777
778
    parser! {
779
        fn expr[Input]()(Input) -> Expr
780
        where
781
            [Input: Stream<Token = char>,]
782
        {
783
            let word = many1(letter()).expected("identifier");
784
            let integer = parser(integer);
785
            let array = between(char('['), char(']'), sep_by(expr(), char(','))).expected("[");
786
            let paren_expr = between(char('('), char(')'), parser(term)).expected("(");
787
            spaces()
788
                .silent()
789
                .with(
790
                    word.map(Expr::Id)
791
                        .or(integer.map(Expr::Int))
792
                        .or(array.map(Expr::Array))
793
                        .or(paren_expr),
794
                )
795
                .skip(spaces().silent())
796
        }
797
    }
798
799
    #[test]
800
    fn expression_basic() {
801
        let result = sep_by(expr(), char(',')).parse("int, 100, [[], 123]");
802
        let exprs = vec![
803
            Expr::Id("int".to_string()),
804
            Expr::Int(100),
805
            Expr::Array(vec![Expr::Array(vec![]), Expr::Int(123)]),
806
        ];
807
        assert_eq!(result, Ok((exprs, "")));
808
    }
809
810
    #[test]
811
    fn expression_error() {
812
        let input = r"
813
,123
814
";
815
        let result = expr().easy_parse(position::Stream::new(input));
816
        let err = easy::Errors {
817
            position: SourcePosition { line: 2, column: 1 },
818
            errors: vec![
819
                Error::Unexpected(','.into()),
820
                Error::Expected("integer".into()),
821
                Error::Expected("identifier".into()),
822
                Error::Expected("[".into()),
823
                Error::Expected("(".into()),
824
            ],
825
        };
826
        assert_eq!(result, Err(err));
827
    }
828
829
    fn term<Input>(input: &mut Input) -> StdParseResult<Expr, Input>
830
    where
831
        Input: Stream<Token = char>,
832
    {
833
        fn times(l: Expr, r: Expr) -> Expr {
834
            Expr::Times(Box::new(l), Box::new(r))
835
        }
836
        fn plus(l: Expr, r: Expr) -> Expr {
837
            Expr::Plus(Box::new(l), Box::new(r))
838
        }
839
        let mul = char('*').map(|_| times);
840
        let add = char('+').map(|_| plus);
841
        let factor = chainl1(expr(), mul);
842
        chainl1(factor, add).parse_stream(input).into()
843
    }
844
845
    #[test]
846
    fn operators() {
847
        let input = r"
848
1 * 2 + 3 * test
849
";
850
        let (result, _) = parser(term).parse(position::Stream::new(input)).unwrap();
851
852
        let e1 = Expr::Times(Box::new(Expr::Int(1)), Box::new(Expr::Int(2)));
853
        let e2 = Expr::Times(
854
            Box::new(Expr::Int(3)),
855
            Box::new(Expr::Id("test".to_string())),
856
        );
857
        assert_eq!(result, Expr::Plus(Box::new(e1), Box::new(e2)));
858
    }
859
860
    #[test]
861
    fn error_position() {
862
        let mut p = string("let")
863
            .skip(parser(follow))
864
            .map(|x| x.to_string())
865
            .or(many1(digit()));
866
        match p.easy_parse(position::Stream::new("le123")) {
867
            Ok(_) => panic!(),
868
            Err(err) => assert_eq!(err.position, SourcePosition { line: 1, column: 1 }),
869
        }
870
        match p.easy_parse(position::Stream::new("let1")) {
871
            Ok(_) => panic!(),
872
            Err(err) => assert_eq!(err.position, SourcePosition { line: 1, column: 4 }),
873
        }
874
    }
875
876
    #[test]
877
    fn sep_by_error_consume() {
878
        let mut p = sep_by::<Vec<_>, _, _, _>(string("abc"), char(','));
879
        let err = p.easy_parse(position::Stream::new("ab,abc")).unwrap_err();
880
        assert_eq!(err.position, SourcePosition { line: 1, column: 1 });
881
    }
882
883
    #[test]
884
    fn inner_error_consume() {
885
        let mut p = many::<Vec<_>, _, _>(between(char('['), char(']'), digit()));
886
        let result = p.easy_parse(position::Stream::new("[1][2][]"));
887
        assert!(result.is_err(), "{:?}", result);
888
        let error = result.map(|x| format!("{:?}", x)).unwrap_err();
889
        assert_eq!(error.position, SourcePosition { line: 1, column: 8 });
890
    }
891
892
    #[test]
893
    fn infinite_recursion_in_box_parser() {
894
        let _: Result<(Vec<_>, _), _> = (many(Box::new(digit()))).parse("1");
895
    }
896
897
    #[test]
898
    fn unsized_parser() {
899
        let mut parser: Box<dyn Parser<_, Output = char, PartialState = _>> = Box::new(digit());
900
        let borrow_parser = &mut *parser;
901
        assert_eq!(borrow_parser.parse("1"), Ok(('1', "")));
902
    }
903
904
    #[test]
905
    fn std_error() {
906
        use std::error::Error as StdError;
907
908
        use std::fmt;
909
910
        #[derive(Debug)]
911
        struct Error;
912
        impl fmt::Display for Error {
913
            fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
914
                write!(f, "error")
915
            }
916
        }
917
        impl StdError for Error {
918
            fn description(&self) -> &str {
919
                "error"
920
            }
921
        }
922
        let result: Result<((), _), easy::Errors<char, &str, _>> =
923
            EasyParser::easy_parse(&mut string("abc").and_then(|_| Err(Error)), "abc");
924
        assert!(result.is_err());
925
        // Test that ParseError can be coerced to a StdError
926
        let _ = result.map_err(|err| {
927
            let err: Box<dyn StdError> = Box::new(err);
928
            err
929
        });
930
    }
931
932
    #[test]
933
    fn extract_std_error() {
934
        // The previous test verified that we could map a ParseError to a StdError by dropping
935
        // the internal error details.
936
        // This test verifies that we can map a ParseError to a StdError
937
        // without dropping the internal error details.  Consumers using `error-chain` will
938
        // appreciate this.  For technical reasons this is pretty janky; see the discussion in
939
        // https://github.com/Marwes/combine/issues/86, and excuse the test with significant
940
        // boilerplate!
941
        use std::error::Error as StdError;
942
943
        use std::fmt;
944
945
        #[derive(Clone, PartialEq, Debug)]
946
        struct CloneOnly(String);
947
948
        #[derive(Debug)]
949
        struct DisplayVec<T>(Vec<T>);
950
951
        #[derive(Debug)]
952
        struct ExtractedError(usize, DisplayVec<Error<CloneOnly, DisplayVec<CloneOnly>>>);
953
954
        impl StdError for ExtractedError {
955
            fn description(&self) -> &str {
956
                "extracted error"
957
            }
958
        }
959
960
        impl fmt::Display for CloneOnly {
961
            fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
962
                write!(f, "{}", self.0)
963
            }
964
        }
965
966
        impl<T: fmt::Debug> fmt::Display for DisplayVec<T> {
967
            fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
968
                write!(f, "[{:?}]", self.0)
969
            }
970
        }
971
972
        impl fmt::Display for ExtractedError {
973
            fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
974
                writeln!(f, "Parse error at {}", self.0)?;
975
                Error::fmt_errors(&(self.1).0, f)
976
            }
977
        }
978
979
        let input = &[CloneOnly("x".to_string()), CloneOnly("y".to_string())][..];
980
        let result = token(CloneOnly("z".to_string()))
981
            .easy_parse(input)
982
            .map_err(|e| e.map_position(|p| p.translate_position(input)))
983
            .map_err(|e| {
984
                ExtractedError(
985
                    e.position,
986
                    DisplayVec(
987
                        e.errors
988
                            .into_iter()
989
                            .map(|e| e.map_range(|r| DisplayVec(r.to_owned())))
990
                            .collect(),
991
                    ),
992
                )
993
            });
994
995
        assert!(result.is_err());
996
        // Test that the fresh ExtractedError is Display, so that the internal errors can be
997
        // inspected by consuming code; and that the ExtractedError can be coerced to StdError.
998
        let _ = result.map_err(|err| {
999
            let s = format!("{}", err);
1000
            assert!(s.starts_with("Parse error at 0"));
1001
            assert!(s.contains("Expected"));
1002
            let err: Box<dyn StdError> = Box::new(err);
1003
            err
1004
        });
1005
    }
1006
}