#![forbid(unsafe_code)]
extern crate alloc;
mod error;
mod parser;
mod serializer;
pub use error::{CsvError, CsvErrorKind};
pub use parser::CsvParser;
pub use serializer::{CsvSerializeError, CsvSerializer, to_string, to_vec, to_writer};
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 = CsvParser::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 = CsvParser::new(input);
let mut de = FormatDeserializer::new(&mut parser);
de.deserialize_root()
}
pub fn from_slice<T>(input: &[u8]) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'static>,
{
let s = core::str::from_utf8(input).map_err(|e| {
let mut context = [0u8; 16];
let context_len = e.valid_up_to().min(16);
context[..context_len].copy_from_slice(&input[..context_len]);
facet_format::DeserializeErrorKind::InvalidUtf8 {
context,
context_len: context_len as u8,
}
.with_span(facet_reflect::Span::new(e.valid_up_to(), 1))
})?;
from_str(s)
}
pub fn from_slice_borrowed<'input, 'facet, T>(input: &'input [u8]) -> Result<T, DeserializeError>
where
T: facet_core::Facet<'facet>,
'input: 'facet,
{
let s = core::str::from_utf8(input).map_err(|e| {
let mut context = [0u8; 16];
let context_len = e.valid_up_to().min(16);
context[..context_len].copy_from_slice(&input[..context_len]);
facet_format::DeserializeErrorKind::InvalidUtf8 {
context,
context_len: context_len as u8,
}
.with_span(facet_reflect::Span::new(e.valid_up_to(), 1))
})?;
from_str_borrowed(s)
}