rate-limit-macro

Crates.iorate-limit-macro
lib.rsrate-limit-macro
version1.0.3
sourcesrc
created_at2023-09-12 04:44:31.39322
updated_at2023-11-06 22:18:01.637897
descriptionProcedural macro that provides a simple way to rate-limit blocks of code.
homepage
repositoryhttps://github.com/dkhokhlov/rate-limit-macro/tree/main/macro
max_upload_size
id970446
size6,951
Dmitri Khokhlov (dkhokhlov)

documentation

README

Rate-Limit-Macro

Introduction

rate-limit-macro is a procedural macro that provides a simple way to rate-limit blocks of code.

Installation

Add the following line to your Cargo.toml under [dependencies]:

rate-limit-macro = "1"

Usage

Basic Usage

Here's a simple example:

use rate_limit_macro::rate_limit;

let mut called_times = 0;

for _ in 0..10 {
    rate_limit!(rate = 5, interval = 1, {
        called_times += 1;
    });
}

// Only 5 calls should have been allowed due to rate limiting.
assert_eq!(called_times, 5);

With Fallback Block

You can also provide an optional fallback block that will be executed when the rate limit is exceeded:

let mut called_times = 0;
let mut fallback_called_times = 0;

for _ in 0..10 {
    rate_limit!(rate = 5, interval = 1, {
        called_times += 1;
    }, {
        fallback_called_times += 1;
    });
}

// Check that the number of rate-limited calls and fallback calls add up to the total calls.
assert_eq!(called_times + fallback_called_times, 10);

API Documentation

  • rate: The maximum number of times the block of code can be executed within the specified interval.
  • interval: The time interval (in seconds) for which the rate applies.
  • block: The block of code to be rate-limited.
  • fallback_block (Optional): A block of code to be executed when the rate limit is exceeded.

Notes

  • This macro is lockless, so rate limiting is not absolutely exact.

Related Crates

  • rate-limit-core: This is a companion library that contains tests and depends on rate-limit-macro.

Source Code

The source code for this crate is located in dkhokhlov/rate-limit-macro GitHub repository.

License

This crate is licensed under the MIT License.

Authors

Contributing

If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are warmly welcome.

Commit count: 4

cargo fmt