binrw_derive

Crates.iobinrw_derive
lib.rsbinrw_derive
version0.14.1
sourcesrc
created_at2021-03-24 04:14:10.456659
updated_at2024-10-13 19:21:39.378368
descriptionDerive macro for binrw
homepagehttps://binrw.rs
repositoryhttps://github.com/jam1garner/binrw
max_upload_size
id372818
size240,564
Colin Snover (csnover)

documentation

https://docs.rs/binrw

README

binrw_derive

Quick start for adding a new directive to binrw

In all cases, look to existing directives to follow established code and test conventions.

  1. Add a keyword for the new directive in binrw::parser::keywords.
  2. Define the meta-type of the new directive in binrw::parser::attrs. If you need a new meta-type, add it to meta_types along with tests.
  3. If the new directive needs a special final type (e.g. CondEndian), add that to a new binrw::parser::types module and export it from binrw::parser::types. New types must ultimately implement binrw::parser::TrySet, but can sometimes do so more simply (using trait generic impls) by implementing From or TryFrom instead.
  4. Add the new directive as a field to the relevant structs in binrw::parser::top_level_attrs and binrw::parser::field_level_attrs.
  5. If the new directive combines with other directives in ways that may be invalid, and the relationship cannot be expressed using an enum type (e.g. ReadMode), add validation in either FromInput::push_field (if the validation can occur immediately after the field is constructed) or FromInput::validate (if it can only be validated after the entire struct has been parsed).
  6. Use the new fields to emit code in the appropriate places in binrw::codegen::read_options and binrw::codegen::write_options.
  7. Add new integration tests in the binrw crate’s tests directory.
  8. If the new directive generates new errors (e.g. from validation), add unit tests to validate those code paths in binrw::parser::tests (in mod.rs) and add identical trybuild tests to the binrw crate’s tests/ui directory. (A nightly compiler is required to run the trybuild tests; see the comment in binrw::tests::ui for more detail.)
Commit count: 896

cargo fmt