extern crate alloc;
#[cfg(feature = "tracing")]
#[allow(unused_macros)]
macro_rules! trace {
($($arg:tt)*) => {
::tracing::trace!($($arg)*)
};
}
#[cfg(not(feature = "tracing"))]
#[allow(unused_macros)]
macro_rules! trace {
($($arg:tt)*) => {};
}
#[cfg(feature = "tracing")]
#[allow(unused_macros)]
macro_rules! debug {
($($arg:tt)*) => {
::tracing::debug!($($arg)*)
};
}
#[cfg(not(feature = "tracing"))]
#[allow(unused_macros)]
macro_rules! debug {
($($arg:tt)*) => {};
}
#[allow(unused_imports)]
pub(crate) use debug;
use facet_reflect::Partial;
#[allow(unused_imports)]
pub(crate) use trace;
mod error;
mod parser;
mod raw_json;
mod scanner;
mod serializer;
#[cfg(feature = "axum")]
mod axum;
#[cfg(feature = "axum")]
pub use axum::{Json, JsonRejection};
pub use error::JsonError;
pub use parser::JsonParser;
pub use raw_json::RawJson;
pub use serializer::{
BytesFormat, HexBytesOptions, JsonSerializeError, JsonSerializer, SerializeOptions,
peek_to_string, peek_to_string_pretty, peek_to_string_with_options, peek_to_writer_std,
peek_to_writer_std_pretty, peek_to_writer_std_with_options, to_string, to_string_pretty,
to_string_with_options, to_vec, to_vec_pretty, to_vec_with_options, to_writer_std,
to_writer_std_pretty, to_writer_std_with_options,
};
pub use facet_format::DeserializeError;
pub fn from_str<T>(input: &str) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'static>,
{
use facet_format::FormatDeserializer;
let mut parser = JsonParser::<true>::new(input.as_bytes());
let mut de = FormatDeserializer::new_owned(&mut parser);
de.deserialize_root()
}
pub fn from_slice<T>(input: &[u8]) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'static>,
{
use facet_format::FormatDeserializer;
let mut parser = JsonParser::<false>::new(input);
let mut de = FormatDeserializer::new_owned(&mut parser);
de.deserialize_root()
}
pub fn from_str_borrowed<'input, 'facet, T>(input: &'input str) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'facet>,
'input: 'facet,
{
use facet_format::FormatDeserializer;
let mut parser = JsonParser::<true>::new(input.as_bytes());
let mut de = FormatDeserializer::new(&mut parser);
de.deserialize_root()
}
pub fn from_slice_borrowed<'input, 'facet, T>(input: &'input [u8]) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'facet>,
'input: 'facet,
{
use facet_format::FormatDeserializer;
let mut parser = JsonParser::<false>::new(input);
let mut de = FormatDeserializer::new(&mut parser);
de.deserialize_root()
}
pub fn from_str_into<'facet>(
input: &str,
partial: Partial<'facet, false>,
) -> Result<Partial<'facet, false>, DeserializeError> {
use facet_format::{FormatDeserializer, MetaSource};
let mut parser = JsonParser::<true>::new(input.as_bytes());
let mut de = FormatDeserializer::new_owned(&mut parser);
#[allow(unsafe_code)]
let partial: Partial<'_, false> =
unsafe { core::mem::transmute::<Partial<'facet, false>, Partial<'_, false>>(partial) };
let partial = de.deserialize_into(partial, MetaSource::FromEvents)?;
#[allow(unsafe_code)]
let partial: Partial<'facet, false> =
unsafe { core::mem::transmute::<Partial<'_, false>, Partial<'facet, false>>(partial) };
Ok(partial)
}
pub fn from_slice_into<'facet>(
input: &[u8],
partial: Partial<'facet, false>,
) -> Result<Partial<'facet, false>, DeserializeError> {
use facet_format::{FormatDeserializer, MetaSource};
let mut parser = JsonParser::<false>::new(input);
let mut de = FormatDeserializer::new_owned(&mut parser);
#[allow(unsafe_code)]
let partial: Partial<'_, false> =
unsafe { core::mem::transmute::<Partial<'facet, false>, Partial<'_, false>>(partial) };
let partial = de.deserialize_into(partial, MetaSource::FromEvents)?;
#[allow(unsafe_code)]
let partial: Partial<'facet, false> =
unsafe { core::mem::transmute::<Partial<'_, false>, Partial<'facet, false>>(partial) };
Ok(partial)
}
pub fn from_str_into_borrowed<'input, 'facet>(
input: &'input str,
partial: Partial<'facet, true>,
) -> Result<Partial<'facet, true>, DeserializeError>
where
'input: 'facet,
{
use facet_format::{FormatDeserializer, MetaSource};
let mut parser = JsonParser::<true>::new(input.as_bytes());
let mut de = FormatDeserializer::new(&mut parser);
de.deserialize_into(partial, MetaSource::FromEvents)
}
pub fn from_str_jsonc<T>(input: &str) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'static>,
{
use facet_format::FormatDeserializer;
let mut parser = JsonParser::<true>::new_jsonc(input.as_bytes());
let mut de = FormatDeserializer::new_owned(&mut parser);
de.deserialize_root()
}
pub fn from_slice_jsonc<T>(input: &[u8]) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'static>,
{
use facet_format::FormatDeserializer;
let mut parser = JsonParser::<false>::new_jsonc(input);
let mut de = FormatDeserializer::new_owned(&mut parser);
de.deserialize_root()
}
pub fn from_str_borrowed_jsonc<'input, 'facet, T>(input: &'input str) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'facet>,
'input: 'facet,
{
use facet_format::FormatDeserializer;
let mut parser = JsonParser::<true>::new_jsonc(input.as_bytes());
let mut de = FormatDeserializer::new(&mut parser);
de.deserialize_root()
}
pub fn from_slice_borrowed_jsonc<'input, 'facet, T>(
input: &'input [u8],
) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'facet>,
'input: 'facet,
{
use facet_format::FormatDeserializer;
let mut parser = JsonParser::<false>::new_jsonc(input);
let mut de = FormatDeserializer::new(&mut parser);
de.deserialize_root()
}
pub fn from_slice_into_borrowed<'input, 'facet>(
input: &'input [u8],
partial: Partial<'facet, true>,
) -> Result<Partial<'facet, true>, DeserializeError>
where
'input: 'facet,
{
use facet_format::{FormatDeserializer, MetaSource};
let mut parser = JsonParser::<false>::new(input);
let mut de = FormatDeserializer::new(&mut parser);
de.deserialize_into(partial, MetaSource::FromEvents)
}