> Aztec.nr API reference, v6.0.0 (mainnet and testnet). Index: https://docs.aztec.network/aztec-nr-api/v6.0.0/llms.txt

# Function derive_serialize

Module: `serde::serialization`

```rust
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:

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

This function generates code equivalent to:

```rust
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);
    }
}
```
