sercon/sercon-base/src/lib.rs
2022-02-22 21:27:36 +01:00

26 lines
628 B
Rust

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<Value>;
}
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(())
}