use ::serde::{Serialize, de::DeserializeOwned};
use crate::decode::decode;
use crate::encode::encode;
use crate::error::{DecodeError, EncodeError};
use crate::options::{DecodeOptions, EncodeOptions};
use crate::value::Value;
use super::deserializer::ValueDeserializer;
use super::serializer::ValueSerializer;
pub fn from_str<T>(input: &str, options: &DecodeOptions) -> Result<T, DecodeError>
where
T: DeserializeOwned,
{
let object = decode(input, options)?;
from_value(&Value::Object(object))
}
pub fn from_value<T>(value: &Value) -> Result<T, DecodeError>
where
T: DeserializeOwned,
{
T::deserialize(ValueDeserializer::new(value)).map_err(DecodeError::from)
}
pub fn to_string<T>(value: &T, options: &EncodeOptions) -> Result<String, EncodeError>
where
T: Serialize,
{
let value = to_value(value)?;
encode(&value, options)
}
pub fn to_value<T>(value: &T) -> Result<Value, EncodeError>
where
T: Serialize,
{
value.serialize(ValueSerializer).map_err(EncodeError::from)
}