Browse Source

resolve compile errors

main
jorgeantonio21 2 years ago
parent
commit
ed38853ba8
No known key found for this signature in database GPG Key ID: 480529AEF44415C8
7 changed files with 103 additions and 66 deletions
  1. +11
    -5
      src/gadgets/arithmetic_u32.rs
  2. +21
    -12
      src/gates/add_many_u32.rs
  3. +21
    -13
      src/gates/arithmetic_u32.rs
  4. +15
    -11
      src/gates/comparison.rs
  5. +14
    -11
      src/gates/range_check_u32.rs
  6. +20
    -13
      src/gates/subtraction_u32.rs
  7. +1
    -1
      src/serialization.rs

+ 11
- 5
src/gadgets/arithmetic_u32.rs

@ -1,8 +1,9 @@
use alloc::string::{String, ToString}; use alloc::string::{String, ToString};
use alloc::vec; use alloc::vec;
use alloc::vec::Vec; use alloc::vec::Vec;
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use core::marker::PhantomData; use core::marker::PhantomData;
use plonky2::plonk::circuit_data::CommonCircuitData;
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use plonky2::field::extension::Extendable; use plonky2::field::extension::Extendable;
use plonky2::hash::hash_types::RichField; use plonky2::hash::hash_types::RichField;
@ -241,24 +242,29 @@ struct SplitToU32Generator, const D: usize> {
_phantom: PhantomData<F>, _phantom: PhantomData<F>,
} }
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
for SplitToU32Generator<F, D> for SplitToU32Generator<F, D>
{ {
fn id(&self) -> String { fn id(&self) -> String {
"SplitToU32Generator".to_string() "SplitToU32Generator".to_string()
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_target(self.x)?; dst.write_target(self.x)?;
dst.write_target_u32(self.low)?; dst.write_target_u32(self.low)?;
dst.write_target_u32(self.high) dst.write_target_u32(self.high)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let x = src.read_target()?; let x = src.read_target()?;
let low = src.read_target_u32()?; let low = src.read_target_u32()?;
let high = src.read_target_u32()?; let high = src.read_target_u32()?;
Ok(Self { x, low, high, _phantom: PhantomData })
Ok(Self {
x,
low,
high,
_phantom: PhantomData,
})
} }
fn dependencies(&self) -> Vec<Target> { fn dependencies(&self) -> Vec<Target> {

+ 21
- 12
src/gates/add_many_u32.rs

@ -1,8 +1,8 @@
use alloc::format; use alloc::format;
use alloc::string::{String, ToString}; use alloc::string::{String, ToString};
use alloc::vec::Vec; use alloc::vec::Vec;
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use core::marker::PhantomData; use core::marker::PhantomData;
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use itertools::unfold; use itertools::unfold;
use plonky2::field::extension::Extendable; use plonky2::field::extension::Extendable;
@ -16,7 +16,7 @@ use plonky2::iop::target::Target;
use plonky2::iop::wire::Wire; use plonky2::iop::wire::Wire;
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite}; use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::circuit_data::CircuitConfig;
use plonky2::plonk::circuit_data::{CircuitConfig, CommonCircuitData};
use plonky2::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase}; use plonky2::plonk::vars::{EvaluationTargets, EvaluationVars, EvaluationVarsBase};
use plonky2::util::ceil_div_usize; use plonky2::util::ceil_div_usize;
@ -91,15 +91,19 @@ impl, const D: usize> Gate for U32AddManyGate
format!("{self:?}") format!("{self:?}")
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_addends)?; dst.write_usize(self.num_addends)?;
dst.write_usize(self.num_ops) dst.write_usize(self.num_ops)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_addends = src.read_usize()?; let num_addends = src.read_usize()?;
let num_ops = src.read_usize()?; let num_ops = src.read_usize()?;
Ok(Self { num_addends, num_ops, _phantom: PhantomData })
Ok(Self {
num_addends,
num_ops,
_phantom: PhantomData,
})
} }
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> { fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
@ -247,7 +251,7 @@ impl, const D: usize> Gate for U32AddManyGate
constraints constraints
} }
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
(0..self.num_ops) (0..self.num_ops)
.map(|i| { .map(|i| {
WitnessGeneratorRef::new( WitnessGeneratorRef::new(
@ -288,24 +292,29 @@ struct U32AddManyGenerator, const D: usize> {
_phantom: PhantomData<F>, _phantom: PhantomData<F>,
} }
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
for U32AddManyGenerator<F, D> for U32AddManyGenerator<F, D>
{ {
fn id(&self) -> String { fn id(&self) -> String {
"U32AddManyGenerator".to_string() "U32AddManyGenerator".to_string()
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
self.gate.serialize(dst)?;
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
self.gate.serialize(dst, common_data)?;
dst.write_usize(self.row)?; dst.write_usize(self.row)?;
dst.write_usize(self.i) dst.write_usize(self.i)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
let gate = U32AddManyGate::deserialize(src)?;
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let gate = U32AddManyGate::deserialize(src, common_data)?;
let row = src.read_usize()?; let row = src.read_usize()?;
let i = src.read_usize()?; let i = src.read_usize()?;
Ok(Self { gate, row, i, _phantom: PhantomData })
Ok(Self {
gate,
row,
i,
_phantom: PhantomData,
})
} }
fn dependencies(&self) -> Vec<Target> { fn dependencies(&self) -> Vec<Target> {

+ 21
- 13
src/gates/arithmetic_u32.rs

@ -1,8 +1,8 @@
use alloc::string::{String, ToString}; use alloc::string::{String, ToString};
use alloc::vec::Vec; use alloc::vec::Vec;
use alloc::{format, vec}; use alloc::{format, vec};
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use core::marker::PhantomData; use core::marker::PhantomData;
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use itertools::unfold; use itertools::unfold;
use plonky2::field::extension::Extendable; use plonky2::field::extension::Extendable;
@ -18,7 +18,7 @@ use plonky2::iop::target::Target;
use plonky2::iop::wire::Wire; use plonky2::iop::wire::Wire;
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite}; use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::circuit_data::CircuitConfig;
use plonky2::plonk::circuit_data::{CircuitConfig, CommonCircuitData};
use plonky2::plonk::vars::{ use plonky2::plonk::vars::{
EvaluationTargets, EvaluationVars, EvaluationVarsBase, EvaluationVarsBaseBatch, EvaluationTargets, EvaluationVars, EvaluationVarsBase, EvaluationVarsBaseBatch,
EvaluationVarsBasePacked, EvaluationVarsBasePacked,
@ -93,13 +93,16 @@ impl, const D: usize> Gate for U32ArithmeticG
format!("{self:?}") format!("{self:?}")
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_ops) dst.write_usize(self.num_ops)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_ops = src.read_usize()?; let num_ops = src.read_usize()?;
Ok(Self { num_ops, _phantom: PhantomData })
Ok(Self {
num_ops,
_phantom: PhantomData,
})
} }
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> { fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
@ -249,10 +252,10 @@ impl, const D: usize> Gate for U32ArithmeticG
constraints constraints
} }
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
(0..self.num_ops) (0..self.num_ops)
.map(|i| { .map(|i| {
let g: WitnessGeneratorRef<F> = WitnessGeneratorRef::new(
let g: WitnessGeneratorRef<F, D> = WitnessGeneratorRef::new(
U32ArithmeticGenerator { U32ArithmeticGenerator {
gate: *self, gate: *self,
row, row,
@ -356,7 +359,7 @@ struct U32ArithmeticGenerator, const D: usize> {
_phantom: PhantomData<F>, _phantom: PhantomData<F>,
} }
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
for U32ArithmeticGenerator<F, D> for U32ArithmeticGenerator<F, D>
{ {
fn id(&self) -> String { fn id(&self) -> String {
@ -425,17 +428,22 @@ impl, const D: usize> SimpleGenerator
} }
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
self.gate.serialize(dst)?;
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
self.gate.serialize(dst, common_data)?;
dst.write_usize(self.row)?; dst.write_usize(self.row)?;
dst.write_usize(self.i) dst.write_usize(self.i)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
let gate = U32ArithmeticGate::deserialize(src)?;
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let gate = U32ArithmeticGate::deserialize(src, common_data)?;
let row = src.read_usize()?; let row = src.read_usize()?;
let i = src.read_usize()?; let i = src.read_usize()?;
Ok(Self { gate, row, i, _phantom: PhantomData })
Ok(Self {
gate,
row,
i,
_phantom: PhantomData,
})
} }
} }

+ 15
- 11
src/gates/comparison.rs

@ -1,8 +1,9 @@
use alloc::string::{String, ToString}; use alloc::string::{String, ToString};
use alloc::vec::Vec; use alloc::vec::Vec;
use alloc::{format, vec}; use alloc::{format, vec};
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use core::marker::PhantomData; use core::marker::PhantomData;
use plonky2::plonk::circuit_data::CommonCircuitData;
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use plonky2::field::extension::Extendable; use plonky2::field::extension::Extendable;
use plonky2::field::packed::PackedField; use plonky2::field::packed::PackedField;
@ -98,16 +99,20 @@ impl, const D: usize> Gate for ComparisonGate
format!("{self:?}<D={D}>") format!("{self:?}<D={D}>")
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_bits)?; dst.write_usize(self.num_bits)?;
dst.write_usize(self.num_chunks)?; dst.write_usize(self.num_chunks)?;
Ok(()) Ok(())
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_bits = src.read_usize()?; let num_bits = src.read_usize()?;
let num_chunks = src.read_usize()?; let num_chunks = src.read_usize()?;
Ok(Self { num_bits, num_chunks, _phantom: PhantomData })
Ok(Self {
num_bits,
num_chunks,
_phantom: PhantomData,
})
} }
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> { fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
@ -299,7 +304,7 @@ impl, const D: usize> Gate for ComparisonGate
constraints constraints
} }
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
let gen = ComparisonGenerator::<F, D> { let gen = ComparisonGenerator::<F, D> {
row, row,
gate: self.clone(), gate: self.clone(),
@ -413,7 +418,7 @@ struct ComparisonGenerator, const D: usize> {
gate: ComparisonGate<F, D>, gate: ComparisonGate<F, D>,
} }
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
for ComparisonGenerator<F, D> for ComparisonGenerator<F, D>
{ {
fn id(&self) -> String { fn id(&self) -> String {
@ -529,17 +534,16 @@ impl, const D: usize> SimpleGenerator
} }
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.row)?; dst.write_usize(self.row)?;
self.gate.serialize(dst)
self.gate.serialize(dst, common_data)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let row = src.read_usize()?; let row = src.read_usize()?;
let gate = ComparisonGate::deserialize(src)?;
let gate = ComparisonGate::deserialize(src, common_data)?;
Ok(Self { row, gate }) Ok(Self { row, gate })
} }
} }
#[cfg(test)] #[cfg(test)]

+ 14
- 11
src/gates/range_check_u32.rs

@ -1,8 +1,9 @@
use alloc::string::{String, ToString}; use alloc::string::{String, ToString};
use alloc::vec::Vec; use alloc::vec::Vec;
use alloc::{format, vec}; use alloc::{format, vec};
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use core::marker::PhantomData; use core::marker::PhantomData;
use plonky2::plonk::circuit_data::CommonCircuitData;
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use plonky2::field::extension::Extendable; use plonky2::field::extension::Extendable;
use plonky2::field::types::Field; use plonky2::field::types::Field;
@ -55,13 +56,16 @@ impl, const D: usize> Gate for U32RangeCheckG
format!("{self:?}") format!("{self:?}")
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_input_limbs) dst.write_usize(self.num_input_limbs)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_input_limbs = src.read_usize()?; let num_input_limbs = src.read_usize()?;
Ok(Self { num_input_limbs, _phantom: PhantomData })
Ok(Self {
num_input_limbs,
_phantom: PhantomData,
})
} }
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> { fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
@ -147,7 +151,7 @@ impl, const D: usize> Gate for U32RangeCheckG
constraints constraints
} }
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
let gen = U32RangeCheckGenerator { gate: *self, row }; let gen = U32RangeCheckGenerator { gate: *self, row };
vec![WitnessGeneratorRef::new(gen.adapter())] vec![WitnessGeneratorRef::new(gen.adapter())]
} }
@ -177,7 +181,7 @@ pub struct U32RangeCheckGenerator, const D: usize>
row: usize, row: usize,
} }
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
for U32RangeCheckGenerator<F, D> for U32RangeCheckGenerator<F, D>
{ {
fn id(&self) -> String { fn id(&self) -> String {
@ -215,17 +219,16 @@ impl, const D: usize> SimpleGenerator
} }
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
self.gate.serialize(dst)?;
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
self.gate.serialize(dst, common_data)?;
dst.write_usize(self.row) dst.write_usize(self.row)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
let gate = U32RangeCheckGate::deserialize(src)?;
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let gate = U32RangeCheckGate::deserialize(src, common_data)?;
let row = src.read_usize()?; let row = src.read_usize()?;
Ok(Self { row, gate }) Ok(Self { row, gate })
} }
} }
#[cfg(test)] #[cfg(test)]

+ 20
- 13
src/gates/subtraction_u32.rs

@ -1,8 +1,8 @@
use alloc::string::{String, ToString}; use alloc::string::{String, ToString};
use alloc::vec::Vec; use alloc::vec::Vec;
use alloc::{format, vec}; use alloc::{format, vec};
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use core::marker::PhantomData; use core::marker::PhantomData;
use plonky2::util::serialization::{Buffer, IoResult, Read, Write};
use plonky2::field::extension::Extendable; use plonky2::field::extension::Extendable;
use plonky2::field::packed::PackedField; use plonky2::field::packed::PackedField;
@ -17,7 +17,7 @@ use plonky2::iop::target::Target;
use plonky2::iop::wire::Wire; use plonky2::iop::wire::Wire;
use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite}; use plonky2::iop::witness::{PartitionWitness, Witness, WitnessWrite};
use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::circuit_data::CircuitConfig;
use plonky2::plonk::circuit_data::{CircuitConfig, CommonCircuitData};
use plonky2::plonk::vars::{ use plonky2::plonk::vars::{
EvaluationTargets, EvaluationVars, EvaluationVarsBase, EvaluationVarsBaseBatch, EvaluationTargets, EvaluationVars, EvaluationVarsBase, EvaluationVarsBaseBatch,
EvaluationVarsBasePacked, EvaluationVarsBasePacked,
@ -87,13 +87,16 @@ impl, const D: usize> Gate for U32Subtraction
format!("{self:?}") format!("{self:?}")
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
fn serialize(&self, dst: &mut Vec<u8>, _common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
dst.write_usize(self.num_ops) dst.write_usize(self.num_ops)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
fn deserialize(src: &mut Buffer, _common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let num_ops = src.read_usize()?; let num_ops = src.read_usize()?;
Ok(Self { num_ops, _phantom: PhantomData })
Ok(Self {
num_ops,
_phantom: PhantomData,
})
} }
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> { fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
@ -195,7 +198,7 @@ impl, const D: usize> Gate for U32Subtraction
constraints constraints
} }
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F>> {
fn generators(&self, row: usize, _local_constants: &[F]) -> Vec<WitnessGeneratorRef<F, D>> {
(0..self.num_ops) (0..self.num_ops)
.map(|i| { .map(|i| {
let g = WitnessGeneratorRef::new( let g = WitnessGeneratorRef::new(
@ -279,7 +282,7 @@ struct U32SubtractionGenerator, const D: usize> {
_phantom: PhantomData<F>, _phantom: PhantomData<F>,
} }
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F>
impl<F: RichField + Extendable<D>, const D: usize> SimpleGenerator<F, D>
for U32SubtractionGenerator<F, D> for U32SubtractionGenerator<F, D>
{ {
fn id(&self) -> String { fn id(&self) -> String {
@ -343,19 +346,23 @@ impl, const D: usize> SimpleGenerator
} }
} }
fn serialize(&self, dst: &mut Vec<u8>) -> IoResult<()> {
self.gate.serialize(dst)?;
fn serialize(&self, dst: &mut Vec<u8>, common_data: &CommonCircuitData<F, D>) -> IoResult<()> {
self.gate.serialize(dst, common_data)?;
dst.write_usize(self.row)?; dst.write_usize(self.row)?;
dst.write_usize(self.i) dst.write_usize(self.i)
} }
fn deserialize(src: &mut Buffer) -> IoResult<Self> {
let gate = U32SubtractionGate::deserialize(src)?;
fn deserialize(src: &mut Buffer, common_data: &CommonCircuitData<F, D>) -> IoResult<Self> {
let gate = U32SubtractionGate::deserialize(src, common_data)?;
let row = src.read_usize()?; let row = src.read_usize()?;
let i = src.read_usize()?; let i = src.read_usize()?;
Ok(Self { gate, row, i, _phantom: PhantomData })
Ok(Self {
gate,
row,
i,
_phantom: PhantomData,
})
} }
} }
#[cfg(test)] #[cfg(test)]

+ 1
- 1
src/serialization.rs

@ -18,7 +18,7 @@ pub trait ReadU32 {
fn read_target_u32(&mut self) -> IoResult<U32Target>; fn read_target_u32(&mut self) -> IoResult<U32Target>;
} }
impl ReadU32 for Buffer {
impl ReadU32 for Buffer<'_> {
#[inline] #[inline]
fn read_target_u32(&mut self) -> IoResult<U32Target> { fn read_target_u32(&mut self) -> IoResult<U32Target> {
Ok(U32Target(self.read_target()?)) Ok(U32Target(self.read_target()?))

Loading…
Cancel
Save