use serde::{Deserialize, Serialize};
use crate::core::fields::m31::BaseField;
use crate::core::fields::qm31::SECURE_EXTENSION_DEGREE;
use crate::core::vcs_lifted::merkle_hasher::MerkleHasherLifted;
use crate::core::vcs_lifted::verifier::PACKED_LEAF_SIZE;
use crate::prover::backend::{Col, ColumnOps};
pub trait MerkleOpsLifted<H: MerkleHasherLifted>:
ColumnOps<BaseField> + ColumnOps<H::Hash> + PackLeavesOps + for<'de> Deserialize<'de> + Serialize
{
fn build_leaves(columns: &[&Col<Self, BaseField>], lifting_log_size: u32)
-> Col<Self, H::Hash>;
fn build_next_layer(prev_layer: &Col<Self, H::Hash>) -> Col<Self, H::Hash>;
}
pub trait PackLeavesOps: ColumnOps<BaseField> {
fn pack_leaves_input(
values: &[&Col<Self, BaseField>; SECURE_EXTENSION_DEGREE],
) -> [Col<Self, BaseField>; SECURE_EXTENSION_DEGREE * PACKED_LEAF_SIZE];
}