sark-json 0.28.2

Borrowed JSON decoding and streaming encoding for sark
Documentation
use crate::common::nested::Empty;
pub mod common;
use o3::buffer::storage;
use sark_http::payload::response::exact;
use sark_json::{
    parsing,
    writing::{Body, TrySize, Writer},
};

use crate::common::encode::*;

#[test]
fn escapes_adjacent() {
    let (value, expected) = ADJACENT;
    let mut out = Vec::new();
    assert!(Writer::new(&mut out).put_str(value).is_continue());
    assert_eq!(out, expected);
    assert_eq!(value.try_size().expect("size"), out.len());
}

#[test]
fn rejects_overflow() {
    let plan = exact::Plan::try_new(Body::new(Length::<0>))
        .map_err(|rejected| rejected.discard())
        .expect("size");
    let error = plan
        .encode(&mut [])
        .expect_err("overflow must report the exact sink failure");
    assert!(
        matches!(error, storage::BuildError::Build(_)),
        "unexpected overflow failure: {error:?}"
    );
    if let storage::BuildError::Build(error) = error {
        let (required, room) = error.into_parts();
        assert_eq!((required.get(), room), (1, 0));
    }
}

#[test]
fn empty_view_exact() {
    let value = <Empty as parsing::Request>::decode(b"{}").expect("decode empty JSON object");
    let plan = exact::Plan::try_new(Body::new(value))
        .map_err(|rejected| rejected.discard())
        .expect("size");
    assert_eq!(plan.len(), 2);
    let mut bytes = [0; 2];
    plan.encode(&mut bytes)
        .expect("write exact empty JSON object");
    assert_eq!(&bytes, b"{}");
}