From 95cd72cd2e0c57cb76cd6d80dc68d47ae9056400 Mon Sep 17 00:00:00 2001 From: Ahmed Farghal Date: Mon, 1 Sep 2025 17:48:48 +0100 Subject: [PATCH] minor improvements --- Cargo.lock | 23 +++++++---------------- Cargo.toml | 4 ++-- src/clock.rs | 1 + src/lib.rs | 11 ++++++++--- src/storage.rs | 2 +- src/storage/atomic.rs | 4 ++++ src/storage/local.rs | 2 ++ src/storage/padded_atomic.rs | 2 ++ 8 files changed, 27 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7600086..50809e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -137,16 +137,16 @@ checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "criterion" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf7af66b0989381bd0be551bd7cc91912a655a58c6918420c9527b1fd8b4679" +checksum = "e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928" dependencies = [ "anes", "cast", "ciborium", "clap", "criterion-plot", - "itertools 0.13.0", + "itertools", "num-traits", "oorandom", "regex", @@ -158,12 +158,12 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +checksum = "9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338" dependencies = [ "cast", - "itertools 0.10.5", + "itertools", ] [[package]] @@ -275,7 +275,7 @@ dependencies = [ [[package]] name = "gardal" -version = "0.0.1-alpha.2" +version = "0.0.1-alpha.3" dependencies = [ "criterion", "futures", @@ -305,15 +305,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" diff --git a/Cargo.toml b/Cargo.toml index 28bfa5c..fb977bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gardal" -version = "0.0.1-alpha.2" +version = "0.0.1-alpha.3" edition = "2024" license = "Apache-2.0 OR MIT" authors = ["Ahmed Farghal "] @@ -24,7 +24,7 @@ tokio-hrtime = { version = "0.1", optional = true } [dev-dependencies] gardal = { path = ".", features = ["async", "tokio", "quanta"] } -criterion = { version = "0.6", default-features = false } +criterion = { version = "0.7", default-features = false } tokio = { version = "1", features = ["sync", "time", "test-util", "macros", "rt", "rt-multi-thread"] } nonzero_ext = { version = "0.3" } tokio-stream = { version = "0.1", features = ["time"] } diff --git a/src/clock.rs b/src/clock.rs index 1a2e40a..9739339 100644 --- a/src/clock.rs +++ b/src/clock.rs @@ -77,6 +77,7 @@ pub trait Clock { /// let clock = StdClock::default(); /// let bucket = TokenBucket::with_clock(limit, clock); /// ``` +#[derive(Clone)] pub struct StdClock { origin: std::time::Instant, } diff --git a/src/lib.rs b/src/lib.rs index 101341b..39f9e00 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -50,6 +50,11 @@ pub use futures::RateLimitedStreamExt; pub use limit::RateLimit; pub use tokens::Tokens; -pub use storage::atomic::{AtomicSharedStorage, AtomicStorage}; -pub use storage::local::LocalStorage; -pub use storage::padded_atomic::PaddedAtomicStorage; +pub use storage::{ + TimeStorage, atomic::AtomicSharedStorage, atomic::AtomicStorage, local::LocalStorage, + padded_atomic::PaddedAtomicStorage, +}; + +pub(crate) mod private { + pub trait Sealed {} +} diff --git a/src/storage.rs b/src/storage.rs index a8066d3..aec17e7 100644 --- a/src/storage.rs +++ b/src/storage.rs @@ -7,7 +7,7 @@ pub mod padded_atomic; /// /// Implementations can provide either atomic or non-atomic access to the /// underlying timestamp depending on the desired level of concurrency. -pub trait TimeStorage { +pub trait TimeStorage: crate::private::Sealed { /// Create a new storage policy with the provided zero time. fn new(zero_time: f64) -> Self; /// Load the current zero time. diff --git a/src/storage/atomic.rs b/src/storage/atomic.rs index 03242b1..fd2bd6d 100644 --- a/src/storage/atomic.rs +++ b/src/storage/atomic.rs @@ -65,6 +65,8 @@ impl Debug for AtomicF64 { #[derive(Debug)] pub struct AtomicStorage(AtomicF64); +impl crate::private::Sealed for AtomicStorage {} + impl TimeStorage for AtomicStorage { fn new(zero_time: f64) -> Self { Self(AtomicF64::new(zero_time)) @@ -105,6 +107,8 @@ impl TimeStorage for AtomicStorage { #[derive(Debug, Clone)] pub struct AtomicSharedStorage(Arc); +impl crate::private::Sealed for AtomicSharedStorage {} + impl TimeStorage for AtomicSharedStorage { fn new(zero_time: f64) -> Self { Self(Arc::new(AtomicF64::new(zero_time))) diff --git a/src/storage/local.rs b/src/storage/local.rs index 807af29..4fbe483 100644 --- a/src/storage/local.rs +++ b/src/storage/local.rs @@ -25,6 +25,8 @@ use super::TimeStorage; #[derive(Debug)] pub struct LocalStorage(Cell); +impl crate::private::Sealed for LocalStorage {} + impl TimeStorage for LocalStorage { fn new(zero_time: f64) -> Self { Self(Cell::new(zero_time)) diff --git a/src/storage/padded_atomic.rs b/src/storage/padded_atomic.rs index c2ad8cf..45dc549 100644 --- a/src/storage/padded_atomic.rs +++ b/src/storage/padded_atomic.rs @@ -28,6 +28,8 @@ use super::cache_padded::CachePadded; /// ``` pub struct PaddedAtomicStorage(CachePadded); +impl crate::private::Sealed for PaddedAtomicStorage {} + impl TimeStorage for PaddedAtomicStorage { fn new(zero_time: f64) -> Self { Self(CachePadded::new(AtomicF64::new(zero_time)))