use crate::bits::Boolean;
use std::fmt::Debug;
pub trait Integer: Debug + Clone {
type IntegerType;
type UnsignedGadget;
type UnsignedIntegerType;
const SIZE: usize;
fn constant(value: Self::IntegerType) -> Self;
fn one() -> Self;
fn zero() -> Self;
fn new(bits: Vec<Boolean>, value: Option<Self::IntegerType>) -> Self;
fn is_constant(&self) -> bool;
fn result_is_constant(first: &Self, second: &Self) -> bool {
first.is_constant() && second.is_constant()
}
fn to_bits_le(&self) -> Vec<Boolean>;
fn to_bits_be(&self) -> Vec<Boolean>;
fn from_bits_le(bits: &[Boolean]) -> Self;
fn get_value(&self) -> Option<String>;
}