use crate::models::refactor::RefactorStateMachine;
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn serialize_state_to_capnp(state: &RefactorStateMachine) -> Result<Vec<u8>, String> {
serde_json::to_vec(state).map_err(|e| format!("Serialization error: {e}"))
}
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn deserialize_state_from_capnp(data: &[u8]) -> Result<RefactorStateMachine, String> {
serde_json::from_slice(data).map_err(|e| format!("Deserialization error: {e}"))
}
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn is_capnp_available() -> bool {
false
}
#[must_use]
#[provable_contracts_macros::contract("pmat-core.yaml", equation = "check_compliance")]
pub fn get_serialization_format() -> &'static str {
if is_capnp_available() {
"Cap'n Proto"
} else {
"JSON"
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::*;
use crate::models::refactor::RefactorConfig;
use std::path::PathBuf;
#[test]
fn test_json_fallback_serialization() {
let state =
RefactorStateMachine::new(vec![PathBuf::from("test.rs")], RefactorConfig::default());
let serialized = serialize_state_to_capnp(&state).unwrap();
let deserialized = deserialize_state_from_capnp(&serialized).unwrap();
assert_eq!(state.targets.len(), deserialized.targets.len());
assert_eq!(
state.config.target_complexity,
deserialized.config.target_complexity
);
}
#[test]
fn test_serialization_format_detection() {
let format = get_serialization_format();
assert!(format == "Cap'n Proto" || format == "JSON");
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod property_tests {
use proptest::prelude::*;
proptest! {
#[test]
fn basic_property_stability(_input in ".*") {
prop_assert!(true);
}
#[test]
fn module_consistency_check(_x in 0u32..1000) {
prop_assert!(_x < 1001);
}
}
}