diff --git a/src/plonk/circuit.rs b/src/plonk/circuit.rs index 327c8e9..2cbd59d 100644 --- a/src/plonk/circuit.rs +++ b/src/plonk/circuit.rs @@ -1,6 +1,7 @@ use core::cmp::max; use core::ops::{Add, Mul}; use std::collections::BTreeMap; +use std::convert::TryFrom; use super::Error; use crate::arithmetic::Field; @@ -71,29 +72,50 @@ impl From> for Column { } } -impl From> for Column { - fn from(any: Column) -> Column { - Column { - index: any.index, - column_type: Advice, +impl TryFrom> for Column { + type Error = &'static str; + + fn try_from(any: Column) -> Result { + match any.column_type { + Any::Advice => { + return Ok(Column { + index: any.index, + column_type: Advice, + }) + } + _ => Err("Cannot convert into Column"), } } } -impl From> for Column { - fn from(any: Column) -> Column { - Column { - index: any.index, - column_type: Fixed, +impl TryFrom> for Column { + type Error = &'static str; + + fn try_from(any: Column) -> Result { + match any.column_type { + Any::Fixed => { + return Ok(Column { + index: any.index, + column_type: Fixed, + }) + } + _ => Err("Cannot convert into Column"), } } } -impl From> for Column { - fn from(any: Column) -> Column { - Column { - index: any.index, - column_type: Aux, +impl TryFrom> for Column { + type Error = &'static str; + + fn try_from(any: Column) -> Result { + match any.column_type { + Any::Aux => { + return Ok(Column { + index: any.index, + column_type: Aux, + }) + } + _ => Err("Cannot convert into Column"), } } } @@ -406,9 +428,9 @@ impl ConstraintSystem { fn query_any_index(&mut self, column: Column, at: i32) -> usize { let index = match column.column_type { - Any::Advice => self.query_advice_index(Column::::from(column), at), - Any::Fixed => self.query_fixed_index(Column::::from(column), at), - Any::Aux => self.query_aux_index(Column::::from(column), at), + Any::Advice => self.query_advice_index(Column::::try_from(column).unwrap(), at), + Any::Fixed => self.query_fixed_index(Column::::try_from(column).unwrap(), at), + Any::Aux => self.query_aux_index(Column::::try_from(column).unwrap(), at), }; index @@ -417,13 +439,15 @@ impl ConstraintSystem { /// Query an Any column at a relative position pub fn query_any(&mut self, column: Column, at: i32) -> Expression { match column.column_type { - Any::Advice => { - Expression::Advice(self.query_advice_index(Column::::from(column), at)) + Any::Advice => Expression::Advice( + self.query_advice_index(Column::::try_from(column).unwrap(), at), + ), + Any::Fixed => Expression::Fixed( + self.query_fixed_index(Column::::try_from(column).unwrap(), at), + ), + Any::Aux => { + Expression::Aux(self.query_aux_index(Column::::try_from(column).unwrap(), at)) } - Any::Fixed => { - Expression::Fixed(self.query_fixed_index(Column::::from(column), at)) - } - Any::Aux => Expression::Aux(self.query_aux_index(Column::::from(column), at)), } } @@ -462,9 +486,13 @@ impl ConstraintSystem { pub(crate) fn get_any_query_index(&self, column: Column, at: i32) -> usize { let index = match column.column_type { - Any::Advice => self.get_advice_query_index(Column::::from(column), at), - Any::Fixed => self.get_fixed_query_index(Column::::from(column), at), - Any::Aux => self.get_aux_query_index(Column::::from(column), at), + Any::Advice => { + self.get_advice_query_index(Column::::try_from(column).unwrap(), at) + } + Any::Fixed => { + self.get_fixed_query_index(Column::::try_from(column).unwrap(), at) + } + Any::Aux => self.get_aux_query_index(Column::::try_from(column).unwrap(), at), }; index