8000 Releases · jam1garner/binrw · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Releases: jam1garner/binrw

Version 0.15.0

05 May 21:44
v0.15.0
841f2bd
Compare
Choose a tag to compare

Breaking changes

  • The generic parameter lists for binrw::helpers functions have been reordered to put most-frequently-used parameters first.
  • Lifetime parameters have been added to several binrw::helpers functions to support borrowed arguments.
  • The MSRV has been increased to 1.70.
  • Parsing a unit enum with magic will now return an Io(UnexpectedEof) error when all attempts to read magic result in an UnexpectedEof. Previously, this would return NoVariantMatch. (#324, #325. Thanks, @plaflamme!)

Enhancements

  • PosValue now includes implementations for Default and BinWrite. The BinWrite implementation simply treats PosValue as a wrapper and writes the stored value in place; the pos field is ignored. Use the seek_before and (optionally) restore_position directives if you want to write a PosValue value to a different position in the output stream. (#270, #273. Thanks, @amirbou!)
  • binrw now uses syn 2 internally, which should reduce the build time for most users of binrw when used with other dependencies that have also updated to syn 2. (#285, #299. Thanks, @Urist-McGit!)
  • The amount of code generated has been reduced, improving compilation times. (#319. Thanks, @ScanMountGoat!)
  • Various small documentation improvements. (Thanks, @marxin!)
  • BinWrite::write_ne and BinWrite::write_ne_args convenience functions have been added to match the same functions in the BinRead API.
  • The owo-colors dependency has been updated to version 4.

Bug fixes

  • Using SeekFrom::End with TakeSeek now correctly seeks relative to the end of the stream if the stream is shorter than the limit. (#291)
  • Using binrw::helpers::count_with to return a Vec<{integer}> using a custom function will no longer ignore the custom function. (#318. Thanks, @kitlith!)
  • It is now possible to pass borrowed values when using binrw::helpers functions.
  • The args directive can now be used when closures are passed to parse_with or write_with.
  • All forwarding calls in the BinReadExt and BinWriteExt traits are now appropriately annotated with #[inline].

Version 0.14.1

13 Oct 19:24
v0.14.1
fef0573
Compare
Choose a tag to compare

Bug fixes

  • Passing a SeekFrom::End to TakeSeek::seek now correctly seeks from the end of the TakeSeek stream instead of the end of the inner stream. (#291)

Version 0.14.0

07 Jun 04:22
v0.14.0
4c83106
Compare
Choose a tag to compare

Breaking changes

  • In derived BinWrite implementations, imported variables are now exposed before field variables, to match the way lexical scoping normally works. If an import and a field have the same name, this will cause the import to be shadowed. Previously, the field would be shadowed.

Enhancements

  • Diagnostic output is improved when using parse_with and map together in an incompatible way.

Bug fixes

  • It is now possible to use a mix of generic and concrete types in BinWrite derives without triggering a type mismatch error.
  • It is now possible to use the anonymous lifetime '_ within nested types inside an import directive. (#241)
  • The compiler will no longer panic when verbose-backtrace is enabled and a derived type contains a docblock with a completely empty line. (#263)
  • Generated code will no longer trigger clippy::unnecessary_fallible_conversions lints.

Version 0.13.3

29 Nov 04:50
v0.13.3
5200cc1
Compare
Choose a tag to compare

Bug fixes

  • Using parse_with/write_with, map_stream, and args together will no longer raise an error about incompatible stream types. (#240)

Version 0.13.2

26 Nov 07:22
v0.13.2
c09f8d3
Compare
Choose a tag to compare

Bug fixes

Using parse_with with map/try_map will no longer raise an error about incompatible types when the types are actually compatible. (#239)

Version 0.13.1

05 Nov 18:12
v0.13.1
8d33e0e
Compare
Choose a tag to compare

Bug fixes

  • Using stream directive together with map_stream no longer causes a borrowck error. (#236)

Version 0.13.0

27 Oct 03:29
v0.13.0
fd08c4e
Compare
Choose a tag to compare

Breaking changes

  • The stream specified by map_stream is now only used when reading the inner value(s) of the field/struct/enum it is applied to. Previously, the mapped stream would also be used for magic, padding, etc. when those directives were also applied to the same field or type, but this caused problems with re-borrowing the stream and made the scope of the directive confusing.

New features

  • Helper functions for reading and writing unsigned 24-bit integers have been added.

Bug fixes

  • It is now possible to use map_stream with count without causing a borrowck error.
  • It is now possible to pass args to a parse_with function that is not Copy without causing a borrowck error. (#185)
  • It is now possible to derive BinWrite on a type whose associated Args type implements Default but is not the unit type. (Thanks, @octylFractal!)
  • It is now possible to use PhantomData<T> with BinWrite where T is not BinWrite. (Thanks, @DCNick3! #230)
  • Calling custom_err on an error with a backtrace will now correctly return the original custom error. (#228)
  • Rust compiler and dependency versions have been updated to the correct minimum versions. (#224)
  • Calling Error::custom_err will now always return the custom error even if there is a backtrace associated with it. (#228)
  • Using self in top-level #[bw] directives now works as expected. (#232)
  • #[bw(assert)] now actually emits assertions on enums and data enum variants instead of silently accepting the directive without emitting any code.

Version 0.12.0

21 Sep 21:31
v0.12.0
d4efd00
Compare
Choose a tag to compare

Breaking changes

  • The default behaviour of FilePtr has been changed to always immediately seek to and read the pointed-to value. Helper functions have been added to the file_ptr module to support the common case of reading from an offset table. Additional helper functions and types will be added in future releases to improve support for file indirection.
  • The BinRead::after_parse API has been removed since it was rarely used, usually broken by manual BinRead implementations, and made it impossible to use borrowed values in arguments in some cases. For custom two-pass parsing, one alternative is to create an object that will store data that need to be used during the second pass, pass a mutable reference to that object as an argument to read_options, add data to that object during the first pass, then use the recorded data from the object to perform the required action for the second pass.
  • deref_now, offset_after, and postprocess_now have been removed as they were designed to control the after_parse API which no longer exists. Any field with a deref_now or postprocess_now directive can simply remove the directive to achieve equivalent functionality. Any struct that used offset_after should reorder the fields so the dependent field is after the offset location.

For more detail on these changes, see #210.

  • Selected helper functions are no longer re-exported to the root of the crate. Access these helper functions, plus all the other helper functions that were never re-exported to the root, from the helpers module.
  • Using the undocumented internal variable this from an assert directive is no longer supported. Replace this with the supported self keyword instead.

New features

  • Helper functions for more efficient reading of offset tables have been added to the file_ptr module. These helpers can be combined with the seek_before directive to support both relative and absolute positioning of the pointed-to data. See the documentation for usage information and examples.
  • assert directives on structs, non-unit enums, and data variants can now access the constructed object using the self keyword. (Thanks, @octylFractal!) (#219)

Enhancements

  • Clone is no longer a required trait for arguments passed to parse_with functions. (Thanks, @octylFractal!)
  • Clone is no longer a required trait for arguments passed to BinReaderExt methods.
  • BinRead is no longer a required trait for dereferencing a value from FilePtr. (#218)
  • map and try_map functions can now mutably borrow values.
  • dbg now also prints information about any padding and alignment directives on a field.
  • Various documentation improvements.

Bug fixes

  • The count directive no longer attempts useless conversions. (Thanks, @poliorcetics!) (#206)
  • dbg now returns the correct position of a field when using pad_before or align_before. (#188)
  • Parser errors are no longer discarded if a stream rewind fails. (#215)
  • Implementation details of binrw will no longer cause borrow checker failures when passing borrowed arguments to child objects.

Version 0.11.2

15 May 01:10
v0.11.2
1fc50bc
Compare
Choose a tag to compare

Bug fixes

  • #[binrw::parser] and #[binrw::writer] now correctly handle receiving a single argument (thanks, @octylFractal!)
  • #[br(count)] now returns an error if the given count is out of range instead of using unwrap and panicking (#194)
< 9774 h2 class="sr-only" id="hd-3ac83c59">Version 0.11.0
05 Feb 02:31
5035d89
Compare
Choose a tag to compare

Breaking changes

  • Enums variants using #[br(magic)] with mixed data types (i.e. enum Foo { #[br(magic(0_u8))] A, #[br(magic(1_i16))] B }) will now always parse top-to-bottom. Previously, variants would be parsed in groups by type. To maximise performance when parsing enums with mixed magic types, make sure variants with the same magic data type are contiguous. (Thanks, @MrNbaYoh!)
  • The BinrwNamedArgs macro and trait have been renamed to NamedArgs.
  • The ReadOptions::offset field has been moved and is now a named argument specific to the FilePtr type. The #[br(offset)] and #[br(offset_after)] directives will continue to work without any change, but manual uses of FilePtr must now pass the offset in arguments instead of options.
  • ReadOptions and WriteOptions have been removed and replaced with a single Endian parameter.
  • The Args associated type now takes a lifetime to support borrowed arguments. Custom helper functions that don’t need to support borrowed arguments can use the 'static lifetime to maintain the previous behaviour.

New features

  • The #[br(dbg)] directive can be used for quick and dirty debugging output to stderr. (Thanks, @Swiftb0y!) (#50, #162)
  • The args_iter helper can be used for parsing any field where each item is parsed using a value from another iterator as an argument (e.g. an object containing a list of header entries, followed by a list of body entries, where each body entry requires data from the corresponding header entry to be parsed.)
  • The TakeSeek reader adapter is a seekable version of the std::io::Take adapter. Use it by importing the TakeSeekExt trait and calling take_seek on any Read + Seek stream.
  • The #[binrw::parser] and #[binrw::writer] attributes simplify the creation of functions compatible with the parse_with and write_with directives.
  • The #[brw(try_calc)] directive adds a fallible version of the existing calc directive.
  • Add directives for accessing and remapping streams by @csnover in #174 (#[brw(map_stream)])

Enhancements

  • It is now possible to use references in imports/arguments.
  • Rendering of errors can now be controlled using the verbose-backtrace crate feature (enabled by default). Disabling this feature removes extra decorations, ANSI codes, and source text from the built-in error formatting.
  • The no-std implementation of Cursor now overrides Seek::stream_position for improved performance using that API.
  • More useful error messages are now given when an args directive is missing from a field that requires it. (#67, #76)
  • Combining #[binread] and #[binwrite] on a struct or enum is now equivalent to just using #[binrw]. Previously, this was an error.
  • Assertion failures without explicit error messages in #[br(assert)] directives now cause clearer error messages that explicitly state that an assertion failed. Previously, only the expression that failed to assert was given in the output.

Bug fixes

  • The no-std implementation of Cursor now actually seeks when using SeekFrom::End.
  • End-of-file I/O errors are now correctly detected in all cases. (#125)
  • #[br(try)] now only constructs a default value when parsing actually fails.
  • Errors in assert, count, offset, offset_after, and parse_with directives now point correctly at the source of the error.
0