pub struct BandwidthQuota {
pub total_bytes: Bytes,
pub used_bytes: Bytes,
pub period_seconds: u64,
pub period_start_ms: u64,
}Expand description
Bandwidth quota for a time period.
§Examples
use chie_shared::BandwidthQuota;
let now = chrono::Utc::now().timestamp_millis() as u64;
// Create 100 GB monthly bandwidth quota
let quota = BandwidthQuota::new(
100 * 1024 * 1024 * 1024, // 100 GB total
50 * 1024 * 1024 * 1024, // 50 GB used
30 * 24 * 60 * 60, // 30 days in seconds
now,
);
// Check remaining bandwidth
assert_eq!(quota.remaining_bytes(), 50 * 1024 * 1024 * 1024);
// Check utilization
assert_eq!(quota.utilization(), 0.5);
// Check if can consume more
assert!(quota.can_consume(30 * 1024 * 1024 * 1024));
assert!(!quota.is_exceeded());Fields§
§total_bytes: BytesTotal bandwidth quota in bytes.
used_bytes: BytesBandwidth used in current period (bytes).
period_seconds: u64Period duration in seconds.
period_start_ms: u64Period start timestamp (Unix milliseconds).
Implementations§
Source§impl BandwidthQuota
impl BandwidthQuota
Sourcepub fn new(
total_bytes: Bytes,
used_bytes: Bytes,
period_seconds: u64,
period_start_ms: u64,
) -> Self
pub fn new( total_bytes: Bytes, used_bytes: Bytes, period_seconds: u64, period_start_ms: u64, ) -> Self
Create a new bandwidth quota.
Sourcepub fn remaining_bytes(&self) -> Bytes
pub fn remaining_bytes(&self) -> Bytes
Get remaining bandwidth in bytes.
Sourcepub fn utilization(&self) -> f64
pub fn utilization(&self) -> f64
Get utilization percentage (0.0 to 1.0).
Sourcepub fn can_consume(&self, bytes: Bytes) -> bool
pub fn can_consume(&self, bytes: Bytes) -> bool
Check if there’s enough bandwidth remaining.
Sourcepub fn is_exceeded(&self) -> bool
pub fn is_exceeded(&self) -> bool
Check if quota is exceeded.
Sourcepub fn avg_bytes_per_second(&self) -> f64
pub fn avg_bytes_per_second(&self) -> f64
Get average bytes per second used.
Sourcepub fn is_period_expired(&self, current_time_ms: u64) -> bool
pub fn is_period_expired(&self, current_time_ms: u64) -> bool
Check if period has expired (given current time).
Trait Implementations§
Source§impl Clone for BandwidthQuota
impl Clone for BandwidthQuota
Source§fn clone(&self) -> BandwidthQuota
fn clone(&self) -> BandwidthQuota
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for BandwidthQuota
impl Debug for BandwidthQuota
Source§impl Default for BandwidthQuota
impl Default for BandwidthQuota
Source§impl<'de> Deserialize<'de> for BandwidthQuota
impl<'de> Deserialize<'de> for BandwidthQuota
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl PartialEq for BandwidthQuota
impl PartialEq for BandwidthQuota
Source§impl Serialize for BandwidthQuota
impl Serialize for BandwidthQuota
impl StructuralPartialEq for BandwidthQuota
Auto Trait Implementations§
impl Freeze for BandwidthQuota
impl RefUnwindSafe for BandwidthQuota
impl Send for BandwidthQuota
impl Sync for BandwidthQuota
impl Unpin for BandwidthQuota
impl UnwindSafe for BandwidthQuota
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more