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

36 lines
950 B
Rust

use std::io::{Read, Write};
use miette::{Context, IntoDiagnostic};
use sercon_base::Backend;
use serde_value::Value;
#[derive(Default)]
pub struct TomlBackend;
impl Backend for TomlBackend {
fn serialize(&self, out: &mut dyn Write, data: Value) -> miette::Result<()> {
let data = toml::to_string_pretty(&data)
.into_diagnostic()
.wrap_err("TOML serialization error")?;
out.write_all(data.as_bytes())
.into_diagnostic()
.wrap_err("error writing TOML data")?;
Ok(())
}
fn deserialize(&self, data: &mut dyn Read) -> miette::Result<Value> {
let mut buf = Vec::new();
data.read_to_end(&mut buf)
.into_diagnostic()
.wrap_err("error reading TOML input")?;
toml::from_slice(&buf)
.into_diagnostic()
.wrap_err("TOML deserialization error")
}
}
impl_filetype_backend!(TomlBackend, ["toml"]);