#![doc = include_str!("readme.md")]
use oak_core::Range;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, PartialEq, Clone)]
pub struct CoqRoot {
pub vernaculars: Vec<Vernacular>,
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, PartialEq, Clone)]
pub enum Vernacular {
Definition {
name: String,
body: String,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Range<usize>,
},
Theorem {
name: String,
statement: String,
proof: String,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Range<usize>,
},
Inductive {
name: String,
constructors: Vec<String>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Range<usize>,
},
Fixpoint {
name: String,
body: String,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Range<usize>,
},
Check {
term: String,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Range<usize>,
},
Print {
name: String,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
span: Range<usize>,
},
}
impl CoqRoot {
pub fn new() -> Self {
Self { vernaculars: Vec::new() }
}
pub fn with_vernaculars(vernaculars: Vec<Vernacular>) -> Self {
Self { vernaculars }
}
}
impl Default for CoqRoot {
fn default() -> Self {
Self::new()
}
}