Releases: m4rw3r/chomp
0.3.1
0.3.0
Added
-
prelude
module containing basic types, parsers and combinators.This is supposed to be the equivalent of Attoparsec's main package.
-
run_parser
which executes a parser on any givenInput
type. -
buffer::InputBuf
which contains a slice and an incomplete flag, much as the oldInput
struct. -
Input<Token=T, Buffer=&[T]>
implementation for&[T]
whereT: Copy + PartialEq
. -
Input<Token=char, Buffer=&str>
implementation for&str
. -
types::Buffer
trait which is implemented for all buffers providing common logic to perform the
final parsing on a buffer without knowing the exact buffer implementation. -
types::U8Input
trait alias forInput<Token=u8>
. -
primitives::Primitives
trait providing access to the primitive methods of theInput
trait.This is used for building fundamental parsers/combinators.
-
ParseResult::inspect
allowing code to observe the success value. -
types::numbering
module for creating position-awareInput
types. -
parsers::skip_while
using an efficient way of skipping data if provided, otherwise falls back
on usingtake_while
and throws the result away. -
chomp::Error
now includes a backtrace intest
anddebug
build profiles thanks to the
debugtrace crate. Backtraces can also be activated
permanently using thebacktrace
feature but this will incur the significant cost of allocating
backtraces even in therelease
profile. -
Feature
noop_error
provides a zero-sized error type for the cases when the expected token is
unimportant. Provides a small performance boost.
Changes
-
Backwards-incompatible:
Input
is now a trait with associated typesToken
andBuffer
.This removes all incomplete logic from the parsers themselves and moves it into the
InputBuf
type. ThisInputBuf
is used if a partial buffer is in memory. It also allows the parsers to
operate directly on slices or use more effective means of storing buffers depending on the
Input
implementation.To upgrade you replace the previous concrete
Input
type with a generic, use its associated
type if required, and refer to theBuffer
associated type to allow for zero-copy parsing::-fn http_version(i: Input<u8>) -> U8Result<&[u8]>; +fn http_version<I: Input<Token=u8>>(i: I) -> SimpleResult<I, I::Buffer>;
The associated types can be restricted if requried:
fn request<I: U8Input>(i: I) -> SimpleResult<I, (Request<I::Buffer>, Vec<Header<I::Buffer>>)> where I::Buffer: ::std::ops::Deref<Target=[u8]>;
-
Backwards-incompatible: Moved types into a more logical module structure, prelude now
exists as aprelude
module. -
Backwards-incompatible:
chomp::Error
is no longer an enum, this is to facillitate the
support of backtraces while keeping code compatible between the different build profiles.Use
chomp::Error::expected_token
to determine if a specific token was expected. -
Feature
verbose_error
is now default
Removed
Input::incomplete
Input::new
ParseResult::expect
ParseResult::unwrap_err
ParseResult::unwrap
buffer::IntoStream
primitives::InputClone
primitives::State
Bugfixes
combinators::bounded
now have a defined behavior when aRange<usize>
hasstart == end
: They will parse exactlystart
times. This also fixed a few overflows and unreachable code being reachable.combinators::bounded::many_till
got fixed for an overflow happening when0: usize
was used to limit the number of iterations.