{"ecosystem":"cargo","package":"nom","from_version":null,"to_version":null,"changes":[{"from_version":"7.1.2","to_version":"8.0.0","change_type":"breaking","description":"`parse` combinator","migration_hint":null},{"from_version":"7.1.2","to_version":"8.0.0","change_type":"breaking","description":"`nom::bits::*` is no longer re-exported at the crate root. This export caused frequent confusion, since e.g. `nom::complete::tag` referred to `nom::bits::complete::tag` instead of the much more commonly used `nom::bytes::complete::tag`. To migrate, change any imports of `nom::{complete::*, streaming::*, bits, bytes}` to `nom::bits::[...]`.","migration_hint":null},{"from_version":"7.1.2","to_version":"8.0.0","change_type":"breaking","description":"`InputIter`, `InputTakeAtPosition`, `InputLength`, `InputTake` and `Slice` are now merged in the `Input` trait","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"behavior","description":"the default error type is now a struct (`nom::error::Error`) instead of a tuple","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"there is now a more general `Parser` trait, so parsers can be something else than a function. This trait also comes with combinator methods like `map`, `flat_map`, `or`. Since it is implemented on `Fn*` traits, it should not affect existing code too much","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"the `FromExternalError` allows wrapping the error returned by the function in the `map_res` combinator","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"`separated_list` is now `separated_list0`","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"the minimal Rust version is now 1.44 (1.37 if building without the `alloc` or `std` features)","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"the `context` combinator is not linked to `ParseError` anymore, instead it come with its own `ContextError` trait","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"combinators that returned a `impl Fn` now return a `impl FnMut` to allow parser closures that capture some mutable value from the context","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"`separated_list` now allows empty elements","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"streaming parsers return the number of additional bytes they need, not the total. This was supposed to be the case everywhere, but some parsers were forgotten","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"breaking","description":"`Needed::Size` now contains a `NonZeroUsize`, so we can reduce the structure's size by 8 bytes. When upgrading, `Needed::Size(number)` can be replaced with `Needed::new(number)`","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"removed","description":"removed the deprecated `methods` module","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"removed","description":"removed the `regexp_macros` cargo feature","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"removed","description":"removed the deprecated `whitespace` module","migration_hint":null},{"from_version":"5.1.1","to_version":"6.0.0","change_type":"renamed","description":"renamed the `dbg!` macro to avoid conflicts with `std::dbg!`","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"api","description":"the arguments from `error_position` and other such macros were swapped to be more consistent with the rest of nom","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"`many0` and other related parsers will now return `Incomplete` if the reach the end of input without an error of the child parser. They will also return `Incomplete` on an empty input","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"the `IResult` type now becomes a `Result` from the standard library","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"`Incomplete` now returns the additional data size needed, not the total data size needed","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"verbose-errors is now a superset of basic errors","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"all the errors now include  the related input slice","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"automatic error conversion: to fix error type inference issues, a custom error type must now implement `std::convert::From<u32>`","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"the `not!` combinator returns unit `()`","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"FindToken's calling convention was swapped","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"the `take_*` combinators are now more coherent and stricter, see commit 484f6724ea3ccb for more information","migration_hint":null},{"from_version":"3.2.1","to_version":"4.0.0","change_type":"breaking","description":"the `sep!` combinator for whitespace only consumes whitespace in the prefix, while the `ws!` combinator takes care of consuming the remaining whitespace","migration_hint":null},{"from_version":"2.2.1","to_version":"3.0.0","change_type":"breaking","description":"`InputIter` does not require `AsChar` on its `Item` type anymore","migration_hint":null},{"from_version":"2.2.1","to_version":"3.0.0","change_type":"breaking","description":"`escaped`, `separated_list` and `separated_nonempty_list` can now return `Incomplete` when necessary","migration_hint":null},{"from_version":"2.2.1","to_version":"3.0.0","change_type":"breaking","description":"in `verbose-errors` mode, the error list is now stored in a `Vec` instead of a box based linked list","migration_hint":null},{"from_version":"2.2.1","to_version":"3.0.0","change_type":"removed","description":"the `core` feature that was putting nom in `no_std` mode has been removed. There is now a `std` feature, activated by default. If it is not activated, nom is in `no_std`","migration_hint":null},{"from_version":"2.2.1","to_version":"3.0.0","change_type":"removed","description":"`chain!` has finally been removed","migration_hint":null},{"from_version":"2.0","to_version":"2.0.1","change_type":"breaking","description":"@jtdowney for noticing that `tag_no_case!` was not working at all for byte slices","migration_hint":null},{"from_version":"2.0","to_version":"2.0.1","change_type":"breaking","description":"@nickbabcock for catching and fixing the `add_error!` mixup","migration_hint":null},{"from_version":"2.0","to_version":"2.0.1","change_type":"breaking","description":"@lucab for documentation fixes","migration_hint":null},{"from_version":"2.0","to_version":"2.0.1","change_type":"breaking","description":"the `not!` combinator now accepts functions","migration_hint":null},{"from_version":"2.0","to_version":"2.0.1","change_type":"breaking","description":"`tag_no_case!` is now working as accepted (before, it accepted everything)","migration_hint":null},{"from_version":"2.0","to_version":"2.0.1","change_type":"renamed","description":"`add_error!` has been renamed to `add_return_error!`","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"behavior","description":"@keeperofdakeys for fixing eol behaviour, writing documentation and adding `named_attr!`","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"behavior","description":"`tag_no_case!` provides case independent comparison. It works nicely, without any allocation, for ASCII strings, but for UTF-8 strings, it defaults to an unsatisfying (and incorrect) comparison by lowercasing both strings","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"behavior","description":"the \"simple\" error management system does not accumulates errors when backtracking. This is a big perf gain, and is activated by default in nom 2.0","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@keruspe for documentation and example fixes, for the `IResult => Result` conversion work, making `AsChar`'s method more consistent, and adding `many_till!`","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@lu-zero for license help","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@adamgreig for type inference fixes","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@jdeeny for implementing `Offset` on `&str`","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@vickenty for documentation fixes and his refactoring of `length_value!` and `length_bytes!`","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@overdrivenpotato for refactoring some combinators","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@taralx for documentation fixes","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@jturner314 for writing documentation","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@bozaro for fixing compilation errors","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@uniphil for adding a `crates.io` badge","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@badboy for documentation fixes","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@jugglerchris for fixing `take_s!`","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"@AndyShiue for implementing `Error` and `Display` on `ErrorKind` and detecting incorrect UTF-8 string indexing","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"nom can now work on any type that implement the traits defined in `src/traits.rs`: `InputLength`, `InputIter`, `InputTake`, `Compare`, `FindToken`, `FindSubstring`, `Slice`","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"the documentation from Github's wiki has been moved to the `doc/` directory. They are markdown files that you can build with [cargo-external-doc](https://crates.io/crates/cargo-external-doc)","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"whitespace separated format support: with the `ws!` combinator, you can automatically introduce whitespace parsers between all parsers and combinators","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"the `permutation!` combinator applies its child parsers in any order, as long as they all succeed once, and return a tuple of the results","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"you can now transform an `IResult` in a `std::result::Result`","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"`length_data!` parses a length, and returns a subslice of that length","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"breaking","description":"`named_attr!` creates functions like `named!` but can add attributes like documentation","migration_hint":null},{"from_version":"1.2.4","to_version":"2.0","change_type":"deprecated","description":"`do_parse!` is a simpler alternative to `chain!`, which is now deprecated","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"api","description":"`value!` is a combinator that always returns the same value. If a child parser is passed as second argument, that value is returned when the child parser succeeds","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"@meh for fixing `Option` and `Vec` imports","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"@hoodie for a documentation fix","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"@joelself for some documentation fixes","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"@vberger for his traits magic making nom functions more generic","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"string related parsers: `tag_s!`, `take_s!`, `is_a_s!`, `is_not_s!`, `take_while_s!`, `take_while1_s!`, `take_till_s!`","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"`tag!` will now compare even on partial input. If it expects \"abcd\" but receives \"ef\", it will now return an `Error` instead of `Incomplete`","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"`many0!` and others will preallocate a larger vector to avoid some copies and reallocations","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"`take_while!`, `take_while1!`, `take_while_s!`, `take_while1_s!` wilreturn an error on empty input","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"if the child parser of `many0!` or `many1!` returns `Incomplete`, it will return `Incomplete` too, possibly updating the needed size","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"`Option,` `Some`, `None` and `Vec` are now used with full path imports","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"`alpha`, `digit`, `alphanumeric`, `space` and `multispace` now accept as input a `&[u8]` or a `&str`. Additionally, they return an error if they receive an empty input","migration_hint":null},{"from_version":"1.0.1","to_version":"1.1.0","change_type":"breaking","description":"@Binero for pushing the work on `&str` parsing","migration_hint":null},{"from_version":"0.5.0","to_version":"1.0.0","change_type":"breaking","description":"`IResult` does not require a lifetime tag anymore, yay!","migration_hint":null},{"from_version":"0.5.0","to_version":"1.0.0","change_type":"breaking","description":"Producers and consumers have been replaced. The new implementation uses less memory and integrates more with parsers","migration_hint":null},{"from_version":"0.5.0","to_version":"1.0.0","change_type":"breaking","description":"`nom::ErrorCode` is now `nom::ErrorKind`","migration_hint":null},{"from_version":"0.5.0","to_version":"1.0.0","change_type":"breaking","description":"`IResult::Error` can now use custom error types, and is generic over the input type","migration_hint":null},{"from_version":"0.5.0","to_version":"1.0.0","change_type":"breaking","description":"`chain!` will count how much data is consumed and use that number to calculate how much data is needed if a parser returned `Incomplete`","migration_hint":null},{"from_version":"0.5.0","to_version":"1.0.0","change_type":"breaking","description":"`alt!` returns `Incomplete` if a child parser returned `Incomplete`, instead of skipping to the next parser","migration_hint":null},{"from_version":"0.5.0","to_version":"1.0.0","change_type":"renamed","description":"`filter!` has been renamed to `take_while!`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"api","description":"`count_fixed!` must take an explicit type as argument to generate the fixed-size array","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"behavior","description":"optional parsing behaviour in `chain!`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"@meh for fixes on `chain!` and for the `rest` parser","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"@daboross for refactoring `many0!` and `many1!`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"@aleksander for the `switch!` combinator idea","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"@TechnoMancer for his help with bit level parsing","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"@sxeraverx for pointing out a bug in `is_a!`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"@frewsxcv for documentation fixes","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"performance improvement for `filter!`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"@ngrewe for his work on producers and consumers","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"`count!` can take 0 elements","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"`is_a!` and `is_not!` can now consume the whole input","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"it is now possible to seek to the end of a `MemProducer`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"`opt!` returns `Done(input, None)` if `the child parser returned `Incomplete`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"`rest` will return the remaining input","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"consumers can now seek to and from the end of input","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"`switch!` applies a first parser then matches on its result to choose the next parser","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"bit-level parsers","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"character-level parsers","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"regular expression parsers","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"implementation of `take_till!`, `take_while!` and `take_while1!`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"`alt!` can return `Incomplete`","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"the error analysis functions will now take references to functions instead of moving them","migration_hint":null},{"from_version":"0.3.11","to_version":"0.4.0","change_type":"breaking","description":"performance improvements on producers","migration_hint":null},{"from_version":"0.1.6","to_version":"0.2.0","change_type":"breaking","description":"the `fold0!` and `fold1!` macros were too complex and awkward to use, the `many*` combinators will be useful for most uses for now","migration_hint":null},{"from_version":"0.1.6","to_version":"0.2.0","change_type":"removed","description":"the `o!` macro does less than `chain!`, so it has been removed","migration_hint":null}],"total":109,"note":"Curated major-version breaking changes. Always verify against the package's official changelog before migrating.","_cache":"miss"}