agent_scroll/
serialize.rs1use serde_json::Value;
2
3use crate::canonical::canonical;
4use crate::error::Error;
5use crate::schema::{validate_sealed_turn, validate_turn};
6
7pub fn serialize(value: &Value) -> Result<Vec<u8>, Error> {
8 canonical(value)
9}
10
11pub fn deserialize(bytes: &[u8]) -> Result<Value, Error> {
12 let parsed: Value = serde_json::from_slice(bytes)?;
13 if validate_sealed_turn(&parsed).is_ok() {
14 return Ok(parsed);
15 }
16 validate_turn(&parsed).map_err(|e| Error::Invalid(format!("deserialize: {e}")))?;
17 Ok(parsed)
18}