mirror of
https://mzte.de/git/LordMZTE/sercon.git
synced 2024-09-27 12:29:12 +02:00
26 lines
628 B
Rust
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(())
|
||
|
}
|