use std::io;
use serde::Serialize;
use serde_json::Result;
use serde_json::ser::{Formatter, CompactFormatter, Serializer};
pub struct VaultaFormatter {
base: CompactFormatter,
}
impl VaultaFormatter {
fn new() -> Self {
VaultaFormatter { base: CompactFormatter {} }
}
}
impl Formatter for VaultaFormatter {
#[inline]
fn write_u128<W>(&mut self, writer: &mut W, value: u128) -> io::Result<()>
where
W: ?Sized + io::Write,
{
writer.write_all(b"\"")?;
self.base.write_u128(writer, value)?;
writer.write_all(b"\"")
}
#[inline]
fn write_i128<W>(&mut self, writer: &mut W, value: i128) -> io::Result<()>
where
W: ?Sized + io::Write,
{
writer.write_all(b"\"")?;
self.base.write_i128(writer, value)?;
writer.write_all(b"\"")
}
#[inline]
fn write_f32<W>(&mut self, writer: &mut W, value: f32) -> io::Result<()>
where
W: ?Sized + io::Write,
{
write!(writer, "{}", value)
}
#[inline]
fn write_f64<W>(&mut self, writer: &mut W, value: f64) -> io::Result<()>
where
W: ?Sized + io::Write,
{
write!(writer, "{}", value)
}
}
pub fn to_string<T>(value: &T) -> Result<String>
where
T: ?Sized + Serialize,
{
let fmt = VaultaFormatter::new();
let mut vec = Vec::with_capacity(128);
let mut ser = Serializer::with_formatter(&mut vec, fmt);
value.serialize(&mut ser)?;
let string = unsafe {
String::from_utf8_unchecked(vec)
};
Ok(string)
}
pub use serde_json::from_str;