2 unstable releases

0.2.0 Apr 13, 2024
0.1.0 Apr 13, 2024

#525 in Rust patterns

Download history 139/week @ 2024-04-07 106/week @ 2024-04-14

245 downloads per month

MIT license

50KB
331 lines

Bit Roles

Latest Version Rust Documentation

This crate enables you to implement granular role and permission management based on bit flags.

Using discrete fields Using bit roles
#[derive(Debug)]
struct User {
    can_send_message: bool,
    can_edit_message: bool
}

fn main() {
    let user = User {
        can_send_message: true,
        can_edit_message: false
    };
}
use bit_roles::BitRole;

#[derive(Debug)]
struct User {
    permissions: usize
}

#[derive(Debug, BitRole, Copy, Clone)]
enum Permission {
    None = 0,
    SendMessage = 1,
    EditMessage = 2,
}

fn main() {
    let mut permissions = Permission::empty();
    permissions.add_one(Permission::SendMessage);

    let user = User {
        permissions: permissions.get_value()
    };
}

Getting started

Add bit_roles to your project:

cargo add bit_rols

Usage

You can derive the BitRole trait for your role enum. It ensures compile-time validation for enum discriminants. Ensure you specify a discriminant for every enum variant; it must be either zero or a power of two. Also, remember to derive the Copy and Clone traits for your enum.

If you need a manager without compile-time checks, it's also exported as BitRoleUnchecked trait. This is useful if you want to use raw integer values for roles or have a complex role enum definition. You will need to implement the Into<usize> trait for your role enum, along with deriving the Copy and Clone traits for it.

Dependencies

~0.3–0.8MB
~19K SLoC