#counter #id #count #identifier

simple-counter

Macro for generating thread-local static counters. Useful for basic ID generation.

1 unstable release

Uses old Rust 2015

0.1.0 Jul 17, 2018

#1798 in Rust patterns

Download history 124/week @ 2024-07-22 135/week @ 2024-07-29 165/week @ 2024-08-05 106/week @ 2024-08-12 161/week @ 2024-08-19 127/week @ 2024-08-26 96/week @ 2024-09-02 273/week @ 2024-09-09 207/week @ 2024-09-16 182/week @ 2024-09-23 172/week @ 2024-09-30 160/week @ 2024-10-07 129/week @ 2024-10-14 335/week @ 2024-10-21 187/week @ 2024-10-28 123/week @ 2024-11-04

788 downloads per month
Used in 11 crates (2 directly)

MIT license

5KB
53 lines

simple-counter

Provides a single macro for generating thread-local global counters by creating a new module with a thread-local static Cell. Currently intended to be used with integer types. Useful for basic ID generation.

Usage

Add the following dependency to your Cargo.toml file:

[dependencies]
simple-counter = "0.1.0"

And make sure to use the #[macro_use] annotation when importing:

#[macro_use]
extern crate simple_counter;

generate_counter!(Counter, usize);

fn main() {

  // Starts at 0 by default
  assert_eq!(Counter::next(), 0);
  assert_eq!(Counter::next(), 1);
  assert_eq!(Counter::next(), 2);

  // Can be set to arbitrary value
  Counter::set(1000);
  assert_eq!(Counter::next(), 1000);
  assert_eq!(Counter::next(), 1001);
  assert_eq!(Counter::next(), 1002);

  // Or reset to 0
  Counter::reset();
  assert_eq!(Counter::next(), 0);
}

Example

Here's a simple unique temp generator for a compiler:

#[macro_use]
extern crate simple_counter;

generate_counter!(TempID, usize);

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Temp {
    id: usize,
    name: String,
}

impl Temp {
    pub fn from_str(name: &'static str) -> Self {
        Temp {
            id: TempID::next(),
            name: name.to_string(),
        }
    }
}

No runtime deps