remainder/layer/
layer_enum.rs

1//! Helper struct that combines multiple `Layer` implementations into
2//! a single struct that can represent many types of `Layer`
3
4use serde::{Deserialize, Serialize};
5use shared_types::Field;
6
7use crate::layer_enum;
8
9use super::gate::{GateLayer, GateLayerDescription, VerifierGateLayer};
10use super::identity_gate::{IdentityGate, IdentityGateLayerDescription, VerifierIdentityGateLayer};
11use super::matmult::{MatMult, MatMultLayerDescription, VerifierMatMultLayer};
12use super::regular_layer::{RegularLayer, RegularLayerDescription, VerifierRegularLayer};
13
14layer_enum!(Layer, (Regular: RegularLayer<F>), (Gate: GateLayer<F>), (IdentityGate: IdentityGate<F>), (MatMult: MatMult<F>));
15
16#[derive(Serialize, Deserialize, Debug, Hash, Clone)]
17#[serde(bound = "F: Field")]
18/// An enum representing the different types of descriptions for each layer,
19/// each description containing the shape information of the corresponding layer.
20pub enum LayerDescriptionEnum<F: Field> {
21    /// The circuit description for a regular layer variant.
22    Regular(RegularLayerDescription<F>),
23    /// The circuit description for a gate layer variant.
24    Gate(GateLayerDescription<F>),
25    /// The circuit description for a identity gate layer variant.
26    IdentityGate(IdentityGateLayerDescription<F>),
27    /// The circuit description for a matmult layer variant.
28    MatMult(MatMultLayerDescription<F>),
29}
30
31#[derive(Serialize, Deserialize, Debug)]
32#[serde(bound = "F: Field")]
33/// An enum representing the different types of fully bound layers.
34pub enum VerifierLayerEnum<F: Field> {
35    /// The fully bound representation of a regular layer.
36    Regular(VerifierRegularLayer<F>),
37    /// The fully bound representation of a gate layer.
38    Gate(VerifierGateLayer<F>),
39    /// The fully bound representation of an identity gate layer.
40    IdentityGate(VerifierIdentityGateLayer<F>),
41    /// The fully bound representation of a matmult layer.
42    MatMult(VerifierMatMultLayer<F>),
43}