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

31 lines
844 B
Rust

use std::io::{Read, Write};
use miette::{Context, IntoDiagnostic, bail};
use sercon_base::Backend;
use serde_value::Value;
#[derive(Default)]
pub struct BincodeBackend;
impl Backend for BincodeBackend {
fn serialize(&self, out: &mut dyn Write, data: Value) -> miette::Result<()> {
let data = bincode::serde::encode_to_vec(
data,
bincode::config::standard().write_fixed_array_length(),
)
.into_diagnostic()
.wrap_err("bincode serialization error")?;
out.write_all(&data)
.into_diagnostic()
.wrap_err("error writing bincode data")?;
Ok(())
}
fn deserialize(&self, _data: &mut dyn Read) -> miette::Result<Value> {
bail!("Bincode does not support deserializing into any");
}
}
impl_filetype_backend!(BincodeBackend, ["bincode"]);