add add_remaining

add_remaining() adds an i64 to the interal "remaining: u64" with underflow protection.
This commit is contained in:
bitfl0wer 2023-04-15 17:08:19 +02:00
parent 62358d05db
commit d30343df38
1 changed files with 34 additions and 0 deletions

View File

@ -151,6 +151,21 @@ pub mod limits {
)
}
}
impl Limit {
pub fn add_remaining(&mut self, remaining: i64) {
if remaining < 0 {
if ((self.remaining as i64 + remaining) as i64) <= 0 {
self.remaining = 0;
return;
}
self.remaining -= remaining.abs() as u64;
return;
}
self.remaining += remaining.abs() as u64;
}
}
pub struct Limits {
pub limit_absolute_messages: Limit,
pub limit_absolute_register: Limit,
@ -413,3 +428,22 @@ pub mod limits {
}
}
}
#[cfg(test)]
mod instance_limits {
use crate::api::limits::{Limit, LimitType};
#[test]
fn limit_below_zero() {
let mut limit = Limit {
bucket: LimitType::AbsoluteMessage,
limit: 0,
remaining: 1,
reset: 0,
};
limit.add_remaining(-2);
assert_eq!(0 as u64, limit.remaining);
limit.add_remaining(-2123123);
assert_eq!(0 as u64, limit.remaining);
}
}