aztec-nr - serde::serialization

Function derive_serialize

pub comptime fn derive_serialize(s: TypeDefinition) -> Quoted

Generates a Serialize trait implementation for a struct type.

Parameters

  • s: The struct type definition to generate the implementation for

Returns

A quoted code block containing the trait implementation

Example

For a struct defined as:

struct Log<N> {
    fields: [Field; N],
    length: u32
}

This function generates code equivalent to:

impl<let N: u32> Serialize for Log<N> {
    let N: u32 = <[Field; N] as Serialize>::N + <u32 as Serialize>::N;

    fn serialize(self) -> [Field; Self::N] {
        let mut writer: Writer<Self::N> = Writer::new();
        self.stream_serialize(&mut writer);
        writer.finish()
    }

    #[inline_always]
    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {
        Serialize::stream_serialize(self.fields, writer);
        Serialize::stream_serialize(self.length, writer);
    }
}