specx

Crates.iospecx
lib.rsspecx
version0.1.0
created_at2025-11-24 14:04:34.005468+00
updated_at2025-11-24 14:04:34.005468+00
descriptionMinimal Specification pattern utilities for Rust with composable predicate specs, boolean combinators, and a micro-DSL.
homepagehttps://github.com/simbiont666/specx
repositoryhttps://github.com/simbiont666/specx
max_upload_size
id1947916
size27,193
Kirill Rudakov (simbiont666)

documentation

https://docs.rs/specx

README

specx — minimal Specification utilities for Rust

specx is a tiny, zero-dependency crate implementing the Specification pattern with ergonomic boolean combinators and a lightweight macro DSL.

Goals

  • Zero dependencies and minimal overhead.
  • Generic, zero-cost combinators with full static typing.
  • Compact DSL for building expressions: spec!(A & (B | !C)).
  • Helpers for predicate-based specifications: spec_fn(|x| ...).

Example

use specx::{Specification, spec};

struct IsAdult;
struct IsAdmin;

struct User {
    age: u8,
    is_admin: bool,
}

impl Specification<User> for IsAdult {
    fn is_satisfied_by(&self, u: &User) -> bool { u.age >= 18 }
}

impl Specification<User> for IsAdmin {
    fn is_satisfied_by(&self, u: &User) -> bool { u.is_admin }
}

let combined = spec!(IsAdult & !IsAdmin);

let u = User { age: 20, is_admin: false };
assert!(combined.is_satisfied_by(&u));
Commit count: 0

cargo fmt