hashmismatch / packed_struct.rs

Bit-level packing and unpacking for Rust
MIT License
164 stars 30 forks source link

Enum Structs #97

Open nicholascioli opened 1 year ago

nicholascioli commented 1 year ago

I've used this library for a while and it has been great, but I was wondering if something like packed enum variants would be something that could be potentially in scope for this project.

I have a packed message that, depending on the tag (the first two bytes), has a different layout per message type. Would this library be able to do handle something like the following?

enum Message {
  // When the first two bytes are 0x16
  Variant1 { field1: String, field2: u64 },

  // When the first two bytes are 0x01
  Variant2 { other_field1: u8 }
}

Or is this better handled as a separate library? I don't mind contributing, if this seems within scope.

rudib commented 1 year ago

For now, I wouldn't add this to the codegen/attribute part of the library. But you can easily implement this manually by writing your own logic into a PackedStruct trait implementation and offloading the work on the inner parts of the variants to the codegen'd packing.