protocol
protocol copied to clipboard
Add several macro attributes
I implemented what I asked for in #25 Let me know if you think that might be useful and if I need to change anything.
I also implemented the possibility to use a length prefix multiple time like this :
#[derive(Protocol, Debug, PartialEq, Eq)]
pub struct WithElementsLengthUsedTwice {
pub count: u32,
pub foo: bool,
#[protocol(length_prefix(elements(count)))]
pub data_1: Vec<u32>,
#[protocol(length_prefix(elements(count)))]
pub data_2: Vec<u32>,
}
@dylanmckay I am waiting for your feedback before updating the documentation.
I started to work on a "skip_if" attribute, for now the derive implementation is quite naive (and only Parcel::read
is implemented).
The idea is to be able to skip serialization/deserialization for an Option<T>
field based on another boolean field or a binary /unary expression.
It looks like this :
#[derive(Protocol, Debug, PartialEq, Eq)]
struct SkipIfField {
pub condition: bool,
#[protocol(skip_if("condition"))]
pub message: Option<u8>,
}
#[derive(Protocol, Debug, PartialEq, Eq)]
struct SkipIfBinaryExp {
pub condition: u8,
#[protocol(skip_if("condition == 7"))]
pub message: Option<u8>,
}
This only works on struct named field, I don't know if we want this for other kind of field.
This is a feature I'd also like! @dylanmckay is there a chance this will be merged? I don't mind helping to finish up the docs?