use alloc::vec::Vec;
use crate::de::{Decoder, NsonDeserialize};
use crate::encoding::{EncodeConfig, Encoder};
use crate::error::Result;
use crate::formats::Format;
use crate::ser::NsonSerialize;
#[derive(Clone, Copy, Debug)]
pub struct Json;
impl Format for Json {
const NAME: &'static str = "json";
const MIME: &'static str = "application/json";
const EXTENSIONS: &'static [&'static str] = &["json"];
const BINARY: bool = false;
fn encode<T: NsonSerialize + ?Sized>(self, value: &T) -> Result<Vec<u8>> {
let mut encoder = Encoder::<Vec<u8>>::for_vec(EncodeConfig::compact());
T::nextencode(value, &mut encoder)?;
encoder.finish_vec()
}
fn decode<'de, T: NsonDeserialize<'de>>(self, input: &'de [u8]) -> Result<T> {
let mut decoder = JsonDecoder::new(input);
let out = T::nextdecode(&mut decoder)?;
decoder.end()?;
Ok(out)
}
}
pub type JsonEncoder<W> = Encoder<W>;
pub type JsonDecoder<'de> = Decoder<'de>;