traitgate 0.1.1

A zero-dependency authorization mini-library powered by stateless traits and an ergonomic `AuthorizationDecision` enum.
Documentation
use traitgate::prelude::*;

struct User {
    is_admin: bool,
}
struct Resource;
struct View;

struct MyAuth;
impl Authorizer<User, View, Resource> for MyAuth {
    fn check(u: &User, _: &View, _: &Resource) -> AuthorizationDecision {
        if u.is_admin {
            AuthorizationDecision::allowed()
        } else {
            AuthorizationDecision::forbidden()
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn admin_allowed() {
        let dec = MyAuth::check(&User { is_admin: true }, &View, &Resource);
        assert!(dec.is_allowed());
    }

    #[test]
    fn non_admin_forbidden() {
        let dec = MyAuth::check(&User { is_admin: false }, &View, &Resource);
        assert!(dec.is_forbidden());
    }
}

fn main() {
    MyAuth::check(&User { is_admin: true }, &View, &Resource);
}