use std::collections::HashMap;
#[allow(dead_code)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SerializedIr {
pub version: u32,
pub module_name: String,
pub declarations: Vec<SerialDecl>,
pub metadata: HashMap<String, String>,
}
#[allow(dead_code)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SerialDecl {
pub name: String,
pub kind: DeclKind,
pub type_: String,
pub body: Option<String>,
pub params: Vec<String>,
}
#[allow(dead_code)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DeclKind {
Def,
Theorem,
Axiom,
Inductive,
Constructor,
Recursor,
}
impl std::fmt::Display for DeclKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
DeclKind::Def => "def",
DeclKind::Theorem => "theorem",
DeclKind::Axiom => "axiom",
DeclKind::Inductive => "inductive",
DeclKind::Constructor => "constructor",
DeclKind::Recursor => "recursor",
};
f.write_str(s)
}
}
#[allow(dead_code)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum IrFormat {
Text,
Binary,
Json,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct IrSerializeConfig {
pub format: IrFormat,
pub pretty: bool,
pub include_types: bool,
pub include_proofs: bool,
}
impl Default for IrSerializeConfig {
fn default() -> Self {
IrSerializeConfig {
format: IrFormat::Text,
pretty: true,
include_types: true,
include_proofs: true,
}
}
}
#[allow(dead_code)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum IrDeserializeResult {
Ok(SerializedIr),
VersionMismatch {
expected: u32,
found: u32,
},
ParseError(String),
Unsupported(String),
}