| Crates.io | permission-translation |
| lib.rs | permission-translation |
| version | 0.3.0 |
| created_at | 2025-10-24 21:58:45.46955+00 |
| updated_at | 2025-10-24 22:18:42.607038+00 |
| description | A library for translating hexadecimal permission values into human-readable capability sets |
| homepage | https://github.com/hugoponthieu/permission-translation |
| repository | https://github.com/hugoponthieu/permission-translation |
| max_upload_size | |
| id | 1899383 |
| size | 101,029 |
A Rust library for translating hexadecimal permission values into human-readable capability sets. This library provides functionality to define permission descriptors, validate permission values, and extract individual capabilities from combined permission hex values.
Add this to your Cargo.toml:
[dependencies]
permission-translation = "0.3.0"
use permission_translation::{
models::{CapabilityDescriptor, CapilityHexValue},
role_capability::RoleCapability,
checks::is_valid_hex,
};
// Create a capability descriptor
let mut descriptor = CapabilityDescriptor::new();
descriptor.insert("Read".to_string(), 0x1);
descriptor.insert("Write".to_string(), 0x2);
descriptor.insert("Delete".to_string(), 0x4);
descriptor.insert("Admin".to_string(), 0x8);
// Create a role with combined permissions (Read + Write)
let permission_value: CapilityHexValue = 0x3;
let role = RoleCapability::new(descriptor.clone(), permission_value);
// Validate the permission value
assert!(is_valid_hex(permission_value, &descriptor));
// Get human-readable capabilities
let capabilities = role.to_name_set();
assert!(capabilities.contains("Read"));
assert!(capabilities.contains("Write"));
// Check specific capabilities
assert!(role.has_capability(&"Read".to_string()));
assert!(!role.has_capability(&"Admin".to_string()));
The library comes with comprehensive examples demonstrating different use cases:
cargo run --example quick_start
A minimal example showing the most common usage patterns with a simple file permission system.
cargo run --example basic_usage
Comprehensive demonstration of all library features including:
cargo run --example validation_showcase
Advanced validation features and edge cases including:
Permission values are 32-bit integers where each bit represents a specific capability. Individual capabilities should use power-of-2 values (0x1, 0x2, 0x4, 0x8, etc.) to enable proper bitwise operations.
let read_permission = 0x1; // Binary: 0001
let write_permission = 0x2; // Binary: 0010
let combined = 0x3; // Binary: 0011 (Read + Write)
Descriptors map human-readable capability names to their hex values, defining the available permissions in your system.
let mut descriptor = CapabilityDescriptor::new();
descriptor.insert("SendMessage".to_string(), 0x1);
descriptor.insert("ManageChannel".to_string(), 0x2);
descriptor.insert("Administrator".to_string(), 0x4);
The RoleCapability struct combines a descriptor with a permission value to provide methods for extracting and checking capabilities.
let role = RoleCapability::new(descriptor, permission_value);
let capabilities = role.to_name_set(); // Get capability names
let hex_values = role.to_hex_set(); // Get hex values
let has_admin = role.has_capability(&"Administrator".to_string());
The library enforces several validation rules:
Generate and view the full API documentation:
cargo doc --no-deps --open
Run the test suite:
cargo test
This will run both unit tests and documentation tests to ensure all examples compile and work correctly.
This project is licensed under the MIT OR Apache-2.0 license.
Contributions are welcome! Please feel free to submit a Pull Request.