4.0.1
------
- Fix broken links in README
4.0.0
------
This release adds supports for types that can throw errors when reading or writing.
New primitive types supported:
- `std::num::NonZeroXXX` types
- `bool as u8` (only `0` and `1` are valid representations, others will throw errors when read)
- `char as u32` (invalid unicode will throw errors when read)
When reading any of those types, the `read()` function will not be available and instead there will be a `try_read()` function.
The `LayoutAs` trait changed and if you're using that to define custom data types, then you now need to implement `try_read` / `try_write`
instead of `read` / `write`.
If reading and/or writing your type cannot fail, you can set the corresponding error type to `std::convert::Infallible`.
That will ensure that your type will have the `read() / write()` functions available on your layout fields.
For any other error types, you will have to access the fields using calls to `try_read() / try_write()`.
**Backwards compatibility:**
Most code should remain backwards compatible, but there are a few scenarios that require you to change your code:
- Updated MSRV to 1.59
- If you did not use `use binary_layout::prelude::*` but instead imported the `binary_layout` traits manually, then you may have to add an import to
`FieldReadExt` and `FieldWriteExt` because that is where the `read()` and `write()` methods that were previously on `FieldCopyAccess` moved to.
- Types implementing `LayoutAs` now need to be `Sized`.
- The `LayoutAs` trait changed. You now need to implement `try_read` and `try_write` instead of `read` and `write` and define the corresponding error types.
- Renamed `define_layout!` macro to `binary_layout!`. For now, `define_layout!` still works but will show a deprecation warning and it will be removed in a future version.
3.3.0
------
- Reduce minimal dependency version requirements to what's actually needed and add a CI task ensuring that those versions are sufficient
3.2.0
------
- Add `NativeEndian` as an option
3.1.4
------
- Fix compiler warnings issued by newer version of rust
3.1.3
------
- Specify MSRV in Cargo.toml
- Improve CI setup
3.1.2
------
- Fixed clippy warnings
- Fixed broken doc links and documentation typos
- Use caret in dependency versions (i.e. depend on `^0.8` instead of `0.8`)
3.1.1
------
- Fixed clippy warnings
3.1.0
------
- Fixed-size array fields (i.e. `[u8; N]`) now return `&[u8; N]` instead of `&[u8]` when accessed
- Fix no_std compatibility
- Add Data::into_slice()
3.0.0
------
Backward compatibility breaking changes:
- Simplify slice API in views: `layout.field_mut()` instead of `layout.field_mut().data_mut()`
- Removed SizedField::SIZE and added Field::SIZE as an Option<usize> (None if the field is open ended). This change breaks backwards compatibility for code using the SIZE field.
- Move some exported names into the "internal" namespace to denote that they're not supposed to be used in user code
Other changes:
- Added support for nested layouts
- Added the ::SIZE constant for returning the size of a whole layout.
- Added support for f32 and f64
- Added support for unit (`()`)
- Guard against users accidentally calling internal macros by marking them with '@'
- Fix some doc links
- Add inline annotations for better performance
2.1.0
------
- Add feature to use this in no-std builds
- Added support for i128 and u128
2.0.1
------
- Fix documentation issues
2.0.0
------
- Improve documentation, e.g. include layout definition in documentation for the generated code
- Allow defining custom field types by implementing the LayoutAs trait
- Refactor: Simplify traits and their dependencies
1.0.1
------
- Fix dependencies on third party macros
1.0.0
------
- Add Code Coverage to CI
- Improve documentation
0.3.0
------
- Improve README.md
- Improve documentation
- More unit tests
- Fix clippy lints
- Add View::into_storage()
0.2.0
------
- Improve README.md
- Add LICENSE files
0.1.0
------
- Initial version