contrafact 0.2.0-rc.1

A trait for highly composable constraints ("facts") which can be used both to verify data and to generate arbitrary data within those constraints
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
use crate::*;

/// A Fact which applies two other facts.
pub fn and<'a, T>(a: impl Fact<'a, T>, b: impl Fact<'a, T>) -> impl Fact<'a, T>
where
    T: Target<'a>,
{
    lambda("and", (a, b), |g, (a, b), t| {
        let t = a.mutate(g, t)?;
        let t = b.mutate(g, t)?;
        Ok(t)
    })
}