libvctrl_handler 5.2.0

Fundamental contracts for building a version control system – no implementations, only traits and types
Documentation
use criterion as _;
use libvctrl_handler::{Blob, MAX_BLOB_SIZE, VctrlError};
mod common;

#[test]
fn test_blob_valid_empty() {
    let blob = common::ok(Blob::new(Vec::new()));
    let empty: &[u8] = &[];
    assert!(blob.is_empty());
    assert_eq!(blob.size(), 0);
    assert_eq!(blob.data(), empty);
}

#[test]
fn test_blob_valid_small() {
    let data = vec![1, 2, 3, 4];
    let blob = common::ok(Blob::new(data.clone()));
    assert!(!blob.is_empty());
    assert_eq!(blob.size(), 4);
    assert_eq!(blob.data(), data.as_slice());
}

#[test]
fn test_blob_exceeds_max_size() {
    let max_len = usize::try_from(MAX_BLOB_SIZE).unwrap_or(usize::MAX);
    let data = vec![0_u8; max_len + 1];
    let result = Blob::new(data);
    assert!(result.is_err());

    let expected_msg = format!(
        "blob size {} exceeds maximum allowed size {}",
        max_len + 1,
        MAX_BLOB_SIZE
    );
    assert_eq!(
        common::err(result),
        VctrlError::ExceededMaxSize(expected_msg)
    );
}