mod emit_impls {
use elicitation::contracts::{Prop, ProvableFrom};
use elicitation::proc_macro2::TokenStream;
use elicitation::quote::quote;
macro_rules! structural_prop {
($t:path, $name:literal) => {
impl Prop for $t {
fn kani_proof() -> TokenStream {
quote! { }
}
fn verus_proof() -> TokenStream {
quote! { }
}
fn creusot_proof() -> TokenStream {
quote! { }
}
}
#[cfg(kani)]
impl kani::Arbitrary for $t {
fn any() -> Self {
$t
}
}
};
}
pub trait NodeRoleProof: Prop {}
pub struct RenderComplete;
structural_prop!(RenderComplete, "RenderComplete");
pub struct IrSourced;
structural_prop!(IrSourced, "IrSourced");
pub struct WcagVerified;
structural_prop!(WcagVerified, "WcagVerified");
pub struct RolePreserved;
structural_prop!(RolePreserved, "RolePreserved");
use crate::VerifiedTree;
use elicitation::contracts::Established;
impl ProvableFrom<VerifiedTree> for WcagVerified {}
impl<T: NodeRoleProof> ProvableFrom<Established<T>> for RolePreserved {}
impl ProvableFrom<Established<WcagVerified>> for RenderComplete {}
}
pub use emit_impls::{IrSourced, NodeRoleProof, RenderComplete, RolePreserved, WcagVerified};