use serde::{Deserialize, Serialize};
use crate::arch::Arch;
use crate::encoding::indexed::{EncodingId, IndexedEncodings};
use crate::instr::InstructionFilter;
use crate::semantics::Computation;
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct ArchInfo {
pub name: String,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct ArchId(pub usize);
#[derive(Serialize, Deserialize)]
pub struct SharedEncodings {
pub architectures: Vec<ArchId>,
pub encodings: Vec<EncodingId>,
}
#[derive(Serialize, Deserialize)]
pub struct SharedEncodingGroup {
pub filter: InstructionFilter,
pub encodings: Vec<SharedEncodings>,
}
#[derive(Serialize, Deserialize)]
#[serde(bound(serialize = "C: Serialize", deserialize = "C: Deserialize<'de>"))]
pub struct ArchComparisonSummary<A: Arch, C: Computation> {
pub architectures: Vec<ArchInfo>,
pub encodings: Vec<SharedEncodingGroup>,
pub index: IndexedEncodings<A, C>,
}