mirror of
https://mzte.de/git/LordMZTE/sercon.git
synced 2024-05-18 23:14:26 +02:00
36 lines
950 B
Rust
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"]);
|