Skip to content

Commit 9308ba9

Browse files
committed
Add some documentation to the bitmap macro
1 parent 728c262 commit 9308ba9

File tree

4 files changed

+65
-3
lines changed

4 files changed

+65
-3
lines changed

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ members = ["macros"]
55
name = "bitmap"
66
version = "0.1.0"
77
edition = "2024"
8-
test = true
98

109
[dependencies]
1110
macros = { path = "./macros" }

macros/src/generator.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ pub fn expand_bitmap(input: BitmapInput) -> syn::Result<TokenStream2> {
4040
});
4141

4242
Ok(quote! {
43+
#[derive(Debug, Clone, Copy)]
4344
#[repr(transparent)]
4445
pub struct #name(pub #storage_ty);
4546

macros/src/lib.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,46 @@ use syn::parse_macro_input;
44
mod generator;
55
mod parser;
66

7+
/// Generates a bitmap struct from the given definition.
8+
///
9+
/// The macro expands to a newtype struct around a `u8` to `u64` (depending on the total size
10+
/// of the definition), with automatically generated getters and setters for each field.
11+
///
12+
/// ### Supported field types
13+
/// - `u1` through `u7`
14+
///
15+
/// ### Current Limitations
16+
/// - Total bit size must be ≤ 64 bits.
17+
/// - No values larger than `u7` currently supported
18+
///
19+
/// ### Generated API
20+
/// For each field `name: T`, the macro generates:
21+
/// - `fn name(&self) -> T` — returns the field value.
22+
/// - `fn set_name(&mut self, val: T)` — sets the field value.
23+
///
24+
/// ### Example
25+
/// ```
26+
/// # use macros::bitmap;
27+
///
28+
/// bitmap!(
29+
/// struct Player {
30+
/// imposter: u1,
31+
/// finished_tasks: u3,
32+
/// kills: u3,
33+
/// }
34+
/// );
35+
///
36+
/// let mut player = Player(0);
37+
/// assert_eq!(std::mem::size_of::<Player>(), 1);
38+
///
39+
/// player.set_imposter(1);
40+
/// player.set_finished_tasks(5);
41+
/// player.set_kills(3);
42+
///
43+
/// assert_eq!(player.imposter(), 1);
44+
/// assert_eq!(player.finished_tasks(), 5);
45+
/// assert_eq!(player.kills(), 3);
46+
/// ```
747
#[proc_macro]
848
pub fn bitmap(input: TokenStream) -> TokenStream {
949
let parsed = parse_macro_input!(input as parser::BitmapInput);

src/lib.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
1-
#[cfg(test)]
2-
use macros::bitmap;
1+
//! Generates a bitmap from the passed struct definition. The generated
2+
//! code includes a struct with getters and setters for each field.
3+
//! Supported types: `u1`, `u2`, `u3`, `u4`, `u5`, `u6`, and `u7`, maximum
4+
//! size: 64 bits.
5+
//!
6+
//! # Example:
7+
//! ```
8+
//! use macros::bitmap;
9+
//!
10+
//! bitmap!(
11+
//! struct Player {
12+
//! imposter: u1,
13+
//! finished_tasks: u3,
14+
//! kills: u3,
15+
//! }
16+
//! );
17+
//!
18+
//! let mut player = Player(0);
19+
//! assert_eq!(std::mem::size_of::<Player>(), 1);
20+
//! player.set_imposter(1);
21+
//! player.set_finished_tasks(5);
22+
//! player.set_kills(3);
23+
//! ```
24+
pub use macros::bitmap;
325

426
#[test]
527
fn one_bit() {

0 commit comments

Comments
 (0)