use crate::Field;
use crate::{keccak::types::KeccakVarLenQuery, rlc::types::ConcatVarFixedArrayTrace};
use halo2_base::{
safe_types::{SafeBytes32, VarLenBytesVec},
AssignedValue,
};
#[derive(Debug, Clone)]
pub struct NestedMappingWitness<F: Field> {
pub witness: Vec<MappingWitness<F>>,
pub slot: SafeBytes32<F>,
pub nestings: AssignedValue<F>,
}
#[derive(Debug, Clone)]
pub struct VarMappingWitness<F: Field> {
pub mapping_slot: SafeBytes32<F>,
pub key: VarLenBytesVec<F>,
pub hash_query: KeccakVarLenQuery<F>,
}
pub type VarMappingTrace<F> = ConcatVarFixedArrayTrace<F>;
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Clone)]
pub enum MappingWitness<F: Field> {
Value(SafeBytes32<F>),
NonValue(VarMappingWitness<F>),
}
impl<F: Field> MappingWitness<F> {
pub fn slot(&self) -> SafeBytes32<F> {
match self {
MappingWitness::Value(slot) => slot.clone(),
MappingWitness::NonValue(witness) => witness.hash_query.output_bytes.clone(),
}
}
}
pub type MappingTrace<F> = Option<VarMappingTrace<F>>;
#[derive(Debug, Clone)]
pub enum SolidityType<F: Field> {
Value(SafeBytes32<F>),
NonValue(VarLenBytesVec<F>),
}