Skip to content

Introduce Octets trait using GATs and drop OctetsRef. #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Nov 4, 2022
Merged

Introduce Octets trait using GATs and drop OctetsRef. #12

merged 8 commits into from
Nov 4, 2022

Conversation

partim
Copy link
Member

@partim partim commented Sep 15, 2022

This PR changes the traits to use the soon-to-be-stabilized generic associated types aka GATs. It drops the OctetsRef trait and all its related weirdness in favor of a simple Octets trait. This new trait serves the same purpose but is implemented by the octets sequence type itself rather than a reference to it.

@partim partim marked this pull request as draft September 15, 2022 10:03
@partim partim marked this pull request as ready for review November 4, 2022 13:34
@partim partim merged commit d6391d5 into main Nov 4, 2022
@partim partim deleted the gats branch November 4, 2022 15:25
partim added a commit that referenced this pull request May 12, 2023
Breaking Changes

* Drop the `OctetsRef` trait and introduce a new `Octets` trait that takes
  over its purpose. This requires Rust 1.65.0. ([#12])
* Change the signature of `Octets::range` to use a range and drop all the
  convenience methods. ([#13])
* Split conversion from an octets builder to an immutable octets sequence
  off of `OctetsBuilder` to the new `FreezeBuilder` trait. ([#25])
* Dropped the `len` and `is_empty` methods from the `OctetsBuilder` trait.
  These can be requested via `AsRef<[u8]>` if necessary. ([#20])
* Rearranged module structure:
  * broke up `traits` into `octets` and `builder`,
  * renamed `types` to `array`, and
  * moved `SmallOctets` to `octets`. ([#18])
* The integer parsing methods on `Parser` have been renamed to make it
  clear they parse big-endian integers and new methods for parsing
  little-endian integers have been added. ([#35])
* The optional traits `SerializeOctets` and `DeserializeOctets` have been
  redesigned for greater flexibility. ([#21])

New

* Added `Parser::parse_parser` that allows parsing a given number of octets
  and return them as a cloned parser. ([#10])
* Add methods to `Parser` to parse 64 and 128 bit integers. ([#11])
* Added support for the `heapless` crate. ([#19])
* Added missing `Octets` implementation for `Array<N>`. ([#29])
* Added `Octets` implementation for `Arc<[u8]>`. ([#28])
* Added blanket implementations for `OctetsBuilder` and `Truncate` for
  mutable references of types that are `OctetsBuilder` and `Truncate`,
  respectively. ([#30])
* Added conversions from `&str` and `&[u8]` to `Str<[u8]>`. ([#31])
* Added `Array::resize_raw`. ([#32], [#33])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant