anodized 0.5.0

A common specification layer for Rust
Documentation
use anodized::spec;

#[spec(
    maintains: match self {
        Ascending(vec) => vec.is_sorted(),
        Descending(vec) => vec.iter().rev().is_sorted(),
    }
)]
#[allow(unused)]
enum MonotonicVec<T: Ord> {
    Ascending(Vec<T>),
    Descending(Vec<T>),
}

#[spec(
    maintains: match self {
        Small { count, .. } => *count <= UNBOXED_CAPACITY,
        Large(vec) => vec.len() > UNBOXED_CAPACITY,
    }
)]
#[allow(unused)]
enum SmallVec<T: Default, const UNBOXED_CAPACITY: usize = 128> {
    Small {
        count: usize,
        buffer: [T; UNBOXED_CAPACITY],
    },
    Large(Vec<T>),
}