pub mod de;
pub mod error;
pub mod ser;
pub mod value;
pub use error::Error;
pub use value::Value;
use forma_core::de::Deserialize;
use forma_core::ser::Serialize;
pub fn to_string<T: Serialize>(value: &T) -> Result<String, Error> {
let mut buf = Vec::new();
to_writer(&mut buf, value)?;
Ok(unsafe { String::from_utf8_unchecked(buf) })
}
pub fn to_vec<T: Serialize>(value: &T) -> Result<Vec<u8>, Error> {
let mut buf = Vec::new();
to_writer(&mut buf, value)?;
Ok(buf)
}
pub fn to_writer<W: std::io::Write, T: Serialize>(writer: W, value: &T) -> Result<(), Error> {
let mut ser = ser::Serializer::new(writer);
value.serialize(&mut ser)
}
pub fn to_string_pretty<T: Serialize>(value: &T) -> Result<String, Error> {
let mut buf = Vec::new();
to_writer_pretty(&mut buf, value)?;
Ok(unsafe { String::from_utf8_unchecked(buf) })
}
pub fn to_writer_pretty<W: std::io::Write, T: Serialize>(
writer: W,
value: &T,
) -> Result<(), Error> {
let mut ser = ser::Serializer::pretty(writer, " ");
value.serialize(&mut ser)
}
pub fn from_str<'de, T: Deserialize<'de>>(s: &'de str) -> Result<T, Error> {
let mut de = de::Deserializer::from_str(s);
let value = T::deserialize(&mut de)?;
de.end_of_input()?;
Ok(value)
}
pub fn from_slice<'de, T: Deserialize<'de>>(bytes: &'de [u8]) -> Result<T, Error> {
let mut de = de::Deserializer::new(bytes);
let value = T::deserialize(&mut de)?;
de.end_of_input()?;
Ok(value)
}
pub fn from_str_lenient<'de, T: Deserialize<'de>>(s: &'de str) -> Result<T, Error> {
let mut de = de::Deserializer::from_str(s);
de.set_lenient(true);
let value = T::deserialize(&mut de)?;
de.end_of_input()?;
Ok(value)
}
pub fn from_slice_lenient<'de, T: Deserialize<'de>>(bytes: &'de [u8]) -> Result<T, Error> {
let mut de = de::Deserializer::new(bytes);
de.set_lenient(true);
let value = T::deserialize(&mut de)?;
de.end_of_input()?;
Ok(value)
}
pub fn from_reader<R: std::io::Read, T: forma_core::de::DeserializeOwned>(
mut reader: R,
) -> Result<T, Error> {
let mut buf = Vec::new();
reader.read_to_end(&mut buf)?;
let mut de = de::Deserializer::new(&buf);
let value = T::deserialize(&mut de)?;
de.end_of_input()?;
Ok(value)
}