use std::io::{Read, Write}; use miette::Context; use serde_value::Value; pub trait Backend { fn serialize(&self, out: &mut dyn Write, data: Value) -> miette::Result<()>; fn deserialize(&self, data: &mut dyn Read) -> miette::Result; } pub fn transcode( inp: &mut dyn Read, out: &mut dyn Write, ser_backend: &dyn Backend, de_backend: &dyn Backend, ) -> miette::Result<()> { let data = de_backend .deserialize(inp) .wrap_err("error in deserialization backend")?; ser_backend .serialize(out, data) .wrap_err("error in serialization backend")?; Ok(()) }