protocol icon indicating copy to clipboard operation
protocol copied to clipboard

Add several macro attributes

Open oknozor opened this issue 3 years ago • 3 comments

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.

oknozor avatar Jul 19 '21 14:07 oknozor

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.

oknozor avatar Jul 20 '21 09:07 oknozor

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.

oknozor avatar Jul 21 '21 10:07 oknozor

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?

JOT85 avatar Jun 18 '22 12:06 JOT85