aztec-nr - protocol_types::meta

Function derive_serialize

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

Generates a Serialize trait implementation for a struct type.

Parameters

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;

    #[inline_always]
    fn serialize(self) -> [Field; Self::N] {
        let mut serialized_params = [0; _];
        let mut offset = 0;

        let serialized_member = Serialize::serialize(self.fields);
        let serialized_member_len = <[Field; N] as Serialize>::N;
        for i in 0..serialized_member_len {
            serialized_params[i + offset] = serialized_member[i];
        }
        offset += serialized_member_len;

        let serialized_member = Serialize::serialize(self.length);
        let serialized_member_len = <u32 as Serialize>::N;
        for i in 0..serialized_member_len {
            serialized_params[i + offset] = serialized_member[i];
        }
        offset += serialized_member_len;

        serialized_params
    }
}