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

# Trait Deserialize

Module: `serde::serialization`

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

    // Required methods
    pub fn deserialize(fields: [Field; Self::N]) -> Self;
    pub fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self;
}
```

Trait for deserializing Noir types from arrays of Fields.

An implementation of the Deserialize 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 is typically used when deserializing return values from function calls in Noir. Since the same function could be called from TypeScript (TS), in which case the TS deserialization would get used, we need to have a match between the 2.

## Associated Constants

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

## Example

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

    fn deserialize(fields: [Field; Self::N]) -> Self {
        let mut reader = Reader::new(fields);
        let result = Self::stream_deserialize(&mut reader);
        reader.finish();
        result
    }

    fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {
        let mut bytes = [0 as u8; M];
        for i in 0..M {
            bytes[i] = reader.read() as u8;
        }
        str::<M>::from(bytes)
    }
}
```

## Required methods

```rust
pub fn deserialize(fields: [Field; Self::N]) -> Self
```

```rust
pub fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self
```

## Implementors

```rust
impl Deserialize for ()
```

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

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

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

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

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

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

```rust
impl Deserialize for AddressNote
```

```rust
impl Deserialize for AppPayload
```

```rust
impl Deserialize for AppSiloedHandshakeSecrets
```

```rust
impl Deserialize for AppendOnlyTreeSnapshot
```

```rust
impl Deserialize for AuthorizationSelector
```

```rust
impl Deserialize for AvmAccumulatedData
```

```rust
impl Deserialize for AvmAccumulatedDataArrayLengths
```

```rust
impl Deserialize for AvmCircuitPublicInputs
```

```rust
impl Deserialize for AztecAddress
```

```rust
impl Deserialize for BlockConstantData
```

```rust
impl Deserialize for BlockHeader
```

```rust
impl Deserialize for BlockReference
```

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

```rust
impl Deserialize for CallContext
```

```rust
impl Deserialize for CheckpointConstantData
```

```rust
impl Deserialize for CheckpointHeader
```

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

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

```rust
impl Deserialize for ContractClassId
```

```rust
impl Deserialize for ContractClassLog
```

```rust
impl Deserialize for ContractInstance
```

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

```rust
impl Deserialize for DiscoveredHandshake
```

```rust
impl Deserialize for EcdsaPublicKeyNote
```

```rust
impl Deserialize for EmbeddedCurvePoint
```

```rust
impl Deserialize for EmbeddedCurveScalar
```

```rust
impl Deserialize for Empty
```

```rust
impl Deserialize for EpochConstantData
```

```rust
impl Deserialize for EthAddress
```

```rust
impl Deserialize for EventSelector
```

```rust
impl Deserialize for Fact
```

```rust
impl Deserialize for FactCollection
```

```rust
impl Deserialize for FactScope
```

```rust
impl Deserialize for Fancier
```

```rust
impl Deserialize for FeeRecipient
```

```rust
impl Deserialize for Field
```

```rust
impl Deserialize for FieldCompressedString
```

```rust
impl Deserialize for FieldNote
```

```rust
impl Deserialize for FunctionCall
```

```rust
impl Deserialize for FunctionData
```

```rust
impl Deserialize for FunctionSelector
```

```rust
impl Deserialize for Gas
```

```rust
impl Deserialize for GasFees
```

```rust
impl Deserialize for GasSettings
```

```rust
impl Deserialize for GlobalVariables
```

```rust
impl Deserialize for HandshakePage
```

```rust
impl Deserialize for HasArray
```

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

```rust
impl Deserialize for HasOption
```

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

```rust
impl Deserialize for IvpkM
```

```rust
impl Deserialize for KeyValidationRequest
```

```rust
impl Deserialize for KeyValidationRequestAndSeparator
```

```rust
impl Deserialize for L2ToL1Message
```

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

```rust
impl Deserialize for LogHash
```

```rust
impl Deserialize for LogRetrievalResponse
```

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

```rust
impl Deserialize for MockStruct
```

```rust
impl Deserialize for NoteMetadata
```

```rust
impl Deserialize for NoteOrigin
```

```rust
impl Deserialize for Nullifier
```

```rust
impl Deserialize for NullifierLeafPreimage
```

```rust
impl Deserialize for NullifierStatus
```

```rust
impl Deserialize for OffchainMessage
```

```rust
impl Deserialize for OffchainMessageWithTx
```

```rust
impl Deserialize for OnchainDeliveryMode
```

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

```rust
impl Deserialize for OriginBlockState
```

```rust
impl Deserialize for PartialAddress
```

```rust
impl Deserialize for PartialStateReference
```

```rust
impl Deserialize for PartialUintNote
```

```rust
impl Deserialize for Poseidon2Sponge
```

```rust
impl Deserialize for PrivateCallRequest
```

```rust
impl Deserialize for PrivateCircuitPublicInputs
```

```rust
impl Deserialize for PrivateLogData
```

```rust
impl Deserialize for PrivateToAvmAccumulatedData
```

```rust
impl Deserialize for PrivateToAvmAccumulatedDataArrayLengths
```

```rust
impl Deserialize for PrivateToPublicAccumulatedData
```

```rust
impl Deserialize for PrivateToPublicKernelCircuitPublicInputs
```

```rust
impl Deserialize for PrivateToRollupAccumulatedData
```

```rust
impl Deserialize for PrivateToRollupKernelCircuitPublicInputs
```

```rust
impl Deserialize for ProtocolContracts
```

```rust
impl Deserialize for PublicCallRequest
```

```rust
impl Deserialize for PublicCallRequestArrayLengths
```

```rust
impl Deserialize for PublicDataTreeLeafPreimage
```

```rust
impl Deserialize for PublicDataWitness
```

```rust
impl Deserialize for PublicDataWrite
```

```rust
impl Deserialize for PublicKeys
```

```rust
impl Deserialize for PublicKeysHash
```

```rust
impl Deserialize for PublicLogs
```

```rust
impl Deserialize for ResolvedTaggingStrategy
```

```rust
impl Deserialize for ResolvedTx
```

```rust
impl Deserialize for RetractableFactOrigin
```

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

```rust
impl Deserialize for Smol
```

```rust
impl Deserialize for SpongeBlob
```

```rust
impl Deserialize for StateReference
```

```rust
impl Deserialize for TaggingSecretStrategy
```

```rust
impl Deserialize for TestAccount
```

```rust
impl Deserialize for TreeSnapshots
```

```rust
impl Deserialize for TxConstantData
```

```rust
impl Deserialize for TxContext
```

```rust
impl Deserialize for TxEffect
```

```rust
impl Deserialize for TxRequest
```

```rust
impl Deserialize for UintNote
```

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

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

```rust
impl Deserialize for bool
```

```rust
impl Deserialize for i16
```

```rust
impl Deserialize for i32
```

```rust
impl Deserialize for i64
```

```rust
impl Deserialize for i8
```

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

```rust
impl Deserialize for u128
```

```rust
impl Deserialize for u16
```

```rust
impl Deserialize for u32
```

```rust
impl Deserialize for u64
```

```rust
impl Deserialize for u8
```
