From cfe4448341cf3e06d3f1aa327e691002bae9f35c Mon Sep 17 00:00:00 2001 From: Robin Salen <30937548+Nashtare@users.noreply.github.com> Date: Sun, 18 Feb 2024 09:34:00 -0500 Subject: [PATCH] Implement `Default` for `DefaultGateSerializer` and `DefaultGeneratorSerializer` (#1531) * Implement Default for DefaultGateSerializer and DefaultGeneratorSerializer * Apply comments * Update doc * Clippy --- plonky2/examples/square_root.rs | 5 ++--- plonky2/src/plonk/config.rs | 4 ++-- .../src/util/serialization/gate_serialization.rs | 9 +++++++++ .../util/serialization/generator_serialization.rs | 14 ++++++++++++++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/plonky2/examples/square_root.rs b/plonky2/examples/square_root.rs index 91b7b79053..fb970a67c5 100644 --- a/plonky2/examples/square_root.rs +++ b/plonky2/examples/square_root.rs @@ -66,6 +66,7 @@ impl, const D: usize> SimpleGenerator } } +#[derive(Default)] pub struct CustomGeneratorSerializer, const D: usize> { pub _phantom: PhantomData, } @@ -131,9 +132,7 @@ fn main() -> Result<()> { // Test serialization { let gate_serializer = DefaultGateSerializer; - let generator_serializer = CustomGeneratorSerializer { - _phantom: PhantomData::, - }; + let generator_serializer = CustomGeneratorSerializer::::default(); let data_bytes = data .to_bytes(&gate_serializer, &generator_serializer) diff --git a/plonky2/src/plonk/config.rs b/plonky2/src/plonk/config.rs index ee5b69ffa8..217c889761 100644 --- a/plonky2/src/plonk/config.rs +++ b/plonky2/src/plonk/config.rs @@ -106,7 +106,7 @@ pub trait GenericConfig: } /// Configuration using Poseidon over the Goldilocks field. -#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize)] +#[derive(Debug, Copy, Clone, Default, Eq, PartialEq, Serialize)] pub struct PoseidonGoldilocksConfig; impl GenericConfig<2> for PoseidonGoldilocksConfig { type F = GoldilocksField; @@ -116,7 +116,7 @@ impl GenericConfig<2> for PoseidonGoldilocksConfig { } /// Configuration using truncated Keccak over the Goldilocks field. -#[derive(Debug, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Copy, Clone, Default, Eq, PartialEq)] pub struct KeccakGoldilocksConfig; impl GenericConfig<2> for KeccakGoldilocksConfig { type F = GoldilocksField; diff --git a/plonky2/src/util/serialization/gate_serialization.rs b/plonky2/src/util/serialization/gate_serialization.rs index 8b10da07b0..c26e60d3f2 100644 --- a/plonky2/src/util/serialization/gate_serialization.rs +++ b/plonky2/src/util/serialization/gate_serialization.rs @@ -114,6 +114,15 @@ pub mod default { use crate::hash::hash_types::RichField; use crate::util::serialization::GateSerializer; + /// A gate serializer that can be used to serialize all default gates supported + /// by the `plonky2` library. + /// Being a unit struct, it can be simply called as + /// ```rust + /// use plonky2::util::serialization::DefaultGateSerializer; + /// let gate_serializer = DefaultGateSerializer; + /// ``` + /// Applications using custom gates should define their own serializer implementing + /// the `GateSerializer` trait. This can be easily done through the `impl_gate_serializer` macro. pub struct DefaultGateSerializer; impl, const D: usize> GateSerializer for DefaultGateSerializer { impl_gate_serializer! { diff --git a/plonky2/src/util/serialization/generator_serialization.rs b/plonky2/src/util/serialization/generator_serialization.rs index 6ede002007..15bae9acd1 100644 --- a/plonky2/src/util/serialization/generator_serialization.rs +++ b/plonky2/src/util/serialization/generator_serialization.rs @@ -127,6 +127,20 @@ pub mod default { use crate::recursion::dummy_circuit::DummyProofGenerator; use crate::util::serialization::WitnessGeneratorSerializer; + /// A generator serializer that can be used to serialize all default generators supported + /// by the `plonky2` library. It can simply be called as + /// ```rust + /// use plonky2::util::serialization::DefaultGeneratorSerializer; + /// use plonky2::plonk::config::PoseidonGoldilocksConfig; + /// + /// const D: usize = 2; + /// type C = PoseidonGoldilocksConfig; + /// let generator_serializer = DefaultGeneratorSerializer::::default(); + /// ``` + /// Applications using custom generators should define their own serializer implementing + /// the `WitnessGeneratorSerializer` trait. This can be easily done through the + /// `impl_generator_serializer` macro. + #[derive(Default)] pub struct DefaultGeneratorSerializer, const D: usize> { pub _phantom: PhantomData, }