acyclic-fs 0.1.5

Rust SDK for versioned workspaces and embedded native mounts
Documentation
use super::{CanonicalDecodeError, Decoder, Encoder};

#[test]
fn exact_capacity_accepts_only_the_complete_header_boundary() {
    let domain = b"domain";
    let minimum = domain.len() + 2;

    assert_eq!(
        Encoder::with_exact_capacity(domain, 7, minimum).map(Encoder::finish),
        Ok([domain.as_slice(), &7_u16.to_le_bytes()].concat())
    );

    assert!(matches!(
        Encoder::with_exact_capacity(domain, 7, minimum - 1),
        Err(CanonicalDecodeError::LengthOverflow)
    ));
}

#[test]
fn decoder_rejects_version_and_bounded_field_overclaims_before_allocation()
-> Result<(), Box<dyn std::error::Error>> {
    let domain = b"domain";
    let mut wrong_version = Encoder::new(domain, 8);
    wrong_version.u8(0);
    assert_eq!(
        Decoder::new(&wrong_version.finish(), domain, 7, u64::MAX).err(),
        Some(CanonicalDecodeError::UnsupportedVersion(8))
    );

    let mut oversized = Encoder::new(domain, 7);
    oversized.u32(5);
    oversized.fixed(b"value");
    let encoded = oversized.finish();
    let mut copying = Decoder::new(&encoded, domain, 7, u64::MAX)?;
    assert_eq!(
        copying.bounded_bytes(4),
        Err(CanonicalDecodeError::FieldTooLarge {
            observed: 5,
            maximum: 4,
        })
    );
    let mut skipping = Decoder::new(&encoded, domain, 7, u64::MAX)?;
    assert_eq!(
        skipping.skip_bounded_bytes(4),
        Err(CanonicalDecodeError::FieldTooLarge {
            observed: 5,
            maximum: 4,
        })
    );
    Ok(())
}