use serde::{Deserialize, Serialize}; use std::{ collections::{HashMap, HashSet}, rc::Rc, }; #[derive(PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct UserQuantifier { pub span: String, } #[derive(PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum QuantifierKind { Internal, User(UserQuantifier), } #[derive(PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct QuantifierX { pub qid: String, pub module: Option, pub kind: QuantifierKind, } pub type Quantifier = Rc; #[derive(PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct InstantiationX { pub quantifier: Quantifier, pub id: (u64, usize), } pub type Instantiation = Rc; #[derive(Serialize, Deserialize)] pub struct Graph( pub HashMap>, ); #[derive(Serialize, Deserialize)] pub struct InstantiationGraph { pub bucket_name: String, pub module: String, pub function: Option, pub quantifiers: HashSet, pub instantiations: HashSet, pub graph: Graph, } impl InstantiationGraph { pub fn serialize(&self, mut w: impl std::io::Write) -> Result<(), String> { bincode_next::serde::encode_into_std_write(self, &mut w, bincode_next::config::legacy()) .map_err(|x| x.to_string()) .map(|_| ()) } pub fn deserialize(mut r: impl std::io::Read) -> Result { bincode_next::serde::decode_from_std_read(&mut r, bincode_next::config::legacy()) .map_err(|x| x.to_string()) } }