Skip to main content

agent_scroll/
serialize.rs

1use 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}