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

# Trait Serialize

Module: `serde::serialization`

```rust
pub trait Serialize {
    let N: u32;

    // Required methods
    pub fn serialize(self) -> [Field; Self::N];
    pub fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>);
}
```

Trait for serializing Noir types into arrays of Fields.

An implementation of the Serialize trait has to follow Noir's intrinsic serialization (each member of a struct converted directly into one or more Fields without any packing or compression). This trait (and Deserialize) are typically used to communicate between Noir and TypeScript (via oracles and function arguments).

## On Following Noir's Intrinsic Serialization

When calling a Noir function from TypeScript (TS), first the function arguments are serialized into an array of fields. This array is then included in the initial witness. Noir's intrinsic serialization is then used to deserialize the arguments from the witness. When the same Noir function is called from Noir this Serialize trait is used instead of the serialization in TS. For this reason we need to have a match between TS serialization, Noir's intrinsic serialization and the implementation of this trait. If there is a mismatch, the function calls fail with an arguments hash mismatch error message.

## Associated Constants

- `N` - The length of the output Field array, known at compile time

## Example

```rust
impl<let N: u32> Serialize for str<N> {
    let N: u32 = N;

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

    fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {
        let bytes = self.as_bytes();
        for i in 0..bytes.len() {
            writer.write(bytes[i] as Field);
        }
    }
}
```

## Required methods

```rust
pub fn serialize(self) -> [Field; Self::N]
```

```rust
pub fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>)
```

## Implementors

```rust
impl<T0, T1> Serialize for (T0, T1)
where
    T0: Serialize,
    T1: Serialize
```

```rust
impl<T0, T1, T2> Serialize for (T0, T1, T2)
where
    T0: Serialize,
    T1: Serialize,
    T2: Serialize
```

```rust
impl<T0, T1, T2, T3> Serialize for (T0, T1, T2, T3)
where
    T0: Serialize,
    T1: Serialize,
    T2: Serialize,
    T3: Serialize
```

```rust
impl<T0, T1, T2, T3, T4> Serialize for (T0, T1, T2, T3, T4)
where
    T0: Serialize,
    T1: Serialize,
    T2: Serialize,
    T3: Serialize,
    T4: Serialize
```

```rust
impl<T0, T1, T2, T3, T4, T5> Serialize for (T0, T1, T2, T3, T4, T5)
where
    T0: Serialize,
    T1: Serialize,
    T2: Serialize,
    T3: Serialize,
    T4: Serialize,
    T5: Serialize
```

```rust
impl<T1> Serialize for (T1,)
where
    T1: Serialize
```

```rust
impl Serialize for AddressNote
```

```rust
impl Serialize for AppPayload
```

```rust
impl Serialize for AppSiloedHandshakeSecrets
```

```rust
impl Serialize for AppendOnlyTreeSnapshot
```

```rust
impl Serialize for AuthorizationSelector
```

```rust
impl Serialize for AvmAccumulatedData
```

```rust
impl Serialize for AvmAccumulatedDataArrayLengths
```

```rust
impl Serialize for AvmCircuitPublicInputs
```

```rust
impl Serialize for AztecAddress
```

```rust
impl Serialize for BlockConstantData
```

```rust
impl Serialize for BlockHeader
```

```rust
impl Serialize for BlockReference
```

```rust
impl<let M: u32, T> Serialize for BoundedVec<T, M>
where
    T: Serialize
```

```rust
impl Serialize for CallContext
```

```rust
impl Serialize for CheckpointConstantData
```

```rust
impl Serialize for CheckpointHeader
```

```rust
impl<let N: u32, T> Serialize for ClaimedLengthArray<T, N>
where
    T: Serialize
```

```rust
impl<let M: u32, let N: u32> Serialize for CompressedString<N, M>
```

```rust
impl Serialize for ContractClassId
```

```rust
impl Serialize for ContractClassLog
```

```rust
impl Serialize for ContractInstance
```

```rust
impl<T> Serialize for Counted<T>
where
    T: Serialize
```

```rust
impl Serialize for DiscoveredHandshake
```

```rust
impl Serialize for EcdsaPublicKeyNote
```

```rust
impl Serialize for EmbeddedCurvePoint
```

```rust
impl Serialize for EmbeddedCurveScalar
```

```rust
impl Serialize for Empty
```

```rust
impl Serialize for EpochConstantData
```

```rust
impl Serialize for EthAddress
```

```rust
impl Serialize for EventSelector
```

```rust
impl Serialize for Fact
```

```rust
impl Serialize for FactCollection
```

```rust
impl Serialize for FactScope
```

```rust
impl Serialize for Fancier
```

```rust
impl Serialize for FeeRecipient
```

```rust
impl Serialize for Field
```

```rust
impl Serialize for FieldCompressedString
```

```rust
impl Serialize for FieldNote
```

```rust
impl Serialize for FunctionCall
```

```rust
impl Serialize for FunctionData
```

```rust
impl Serialize for FunctionSelector
```

```rust
impl Serialize for Gas
```

```rust
impl Serialize for GasFees
```

```rust
impl Serialize for GasSettings
```

```rust
impl Serialize for GlobalVariables
```

```rust
impl Serialize for HandshakePage
```

```rust
impl Serialize for HasArray
```

```rust
impl<let N: u32, T> Serialize for HasArrayWithGenerics<T, N>
where
    T: Serialize
```

```rust
impl Serialize for HasOption
```

```rust
impl<Note> Serialize for HintedNote<Note>
where
    Note: Serialize
```

```rust
impl Serialize for IvpkM
```

```rust
impl Serialize for KeyValidationRequest
```

```rust
impl Serialize for KeyValidationRequestAndSeparator
```

```rust
impl Serialize for L2ToL1Message
```

```rust
impl<let N: u32> Serialize for Log<N>
```

```rust
impl Serialize for LogHash
```

```rust
impl Serialize for LogRetrievalRequest
```

```rust
impl Serialize for LogRetrievalResponse
```

```rust
impl<let N: u32> Serialize for MembershipWitness<N>
```

```rust
impl Serialize for MockStruct
```

```rust
impl Serialize for NoteMetadata
```

```rust
impl Serialize for Nullifier
```

```rust
impl Serialize for NullifierLeafPreimage
```

```rust
impl Serialize for OffchainMessage
```

```rust
impl Serialize for OffchainMessageWithTx
```

```rust
impl Serialize for OnchainDeliveryMode
```

```rust
impl<T> Serialize for Option<T>
where
    T: Serialize
```

```rust
impl Serialize for OriginBlockState
```

```rust
impl Serialize for PartialAddress
```

```rust
impl Serialize for PartialStateReference
```

```rust
impl Serialize for PartialUintNote
```

```rust
impl Serialize for Poseidon2Sponge
```

```rust
impl Serialize for PrivateCallRequest
```

```rust
impl Serialize for PrivateCircuitPublicInputs
```

```rust
impl Serialize for PrivateLogData
```

```rust
impl Serialize for PrivateToAvmAccumulatedData
```

```rust
impl Serialize for PrivateToAvmAccumulatedDataArrayLengths
```

```rust
impl Serialize for PrivateToPublicAccumulatedData
```

```rust
impl Serialize for PrivateToPublicKernelCircuitPublicInputs
```

```rust
impl Serialize for PrivateToRollupAccumulatedData
```

```rust
impl Serialize for PrivateToRollupKernelCircuitPublicInputs
```

```rust
impl Serialize for ProtocolContracts
```

```rust
impl Serialize for PublicCallRequest
```

```rust
impl Serialize for PublicCallRequestArrayLengths
```

```rust
impl Serialize for PublicDataTreeLeafPreimage
```

```rust
impl Serialize for PublicDataWitness
```

```rust
impl Serialize for PublicDataWrite
```

```rust
impl Serialize for PublicKeys
```

```rust
impl Serialize for PublicKeysHash
```

```rust
impl Serialize for PublicLogs
```

```rust
impl Serialize for ResolvedTaggingStrategy
```

```rust
impl Serialize for ResolvedTx
```

```rust
impl Serialize for RetractableFactOrigin
```

```rust
impl<T> Serialize for Scoped<T>
where
    T: Serialize
```

```rust
impl Serialize for Smol
```

```rust
impl Serialize for SpongeBlob
```

```rust
impl Serialize for StateReference
```

```rust
impl Serialize for TaggingSecretStrategy
```

```rust
impl Serialize for TestAccount
```

```rust
impl Serialize for TreeSnapshots
```

```rust
impl Serialize for TxConstantData
```

```rust
impl Serialize for TxContext
```

```rust
impl Serialize for TxEffect
```

```rust
impl Serialize for TxRequest
```

```rust
impl Serialize for UintNote
```

```rust
impl<T> Serialize for UnconstrainedArray<T, EphemeralOracles>
```

```rust
impl<let M: u32, T> Serialize for [T; M]
where
    T: Serialize
```

```rust
impl Serialize for bool
```

```rust
impl Serialize for i16
```

```rust
impl Serialize for i32
```

```rust
impl Serialize for i64
```

```rust
impl Serialize for i8
```

```rust
impl<let M: u32> Serialize for str<M>
```

```rust
impl Serialize for u128
```

```rust
impl Serialize for u16
```

```rust
impl Serialize for u32
```

```rust
impl Serialize for u64
```

```rust
impl Serialize for u8
```
