Classic Bitfield

A rust crate which tries to create an experience as close to traditional bit-flag/bitfield value enum ergonomics with as little boilerplate as possible.

Features

Installation

Add the crate as a dependency: ~~~console cargo add classic-bitfield ~~~

Example

```rust

[bitfield_enum(as u8)]

pub(crate) enum Permissions { /// Permission to run executables or list directories EXECUTE, /// Permssion to write to the file WRITE, /// Permission to read to the file READ, /// COMBO #[repr(0o6)] READANDWRITE, }

fn main() { let value = Permissions::allset(); assert!(value.hasexecute()); assert!(!value.hasreadandwrite()); let value = value.without(Permissions::EXECUTE); assert!(!value.hasexecute()); assert!(value.haswrite()); } `` With--features=serde(requiresserde; example requiresserdejsonand serde's"derive"` feature)

```rust use std::io::stdout;

use classicbitfield::bitfieldenum; use serde::{Deserialize, Serialize};

[bitfield_enum(as u8)]

pub(crate) enum Permissions { /// Permission to run executables or list directories EXECUTE, /// Permssion to write to the file WRITE, /// Permission to read to the file READ, /// COMBO #[repr(0o6)] READANDWRITE, }

use permissionsserde::numericrepresentation;

[derive(Serialize, Deserialize)]

struct FileMetadata { #[serde(with = "numeric_representation")] permissions: Permissions, }

fn main() { let stdout = stdout().lock(); let example = FileMetadata { permissions: Permissions::READANDWRITE, }; serdejson::towriter_pretty(stdout, &example).unwrap(); println!(); } The output from the above example is: json { "permissions": 6 } ```

To get an idea of what features will be available on your generated type, take a look at the tests.

Limitations