mirror of https://github.com/breard-r/acmed.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.1 KiB
69 lines
1.1 KiB
use crate::config::Duration;
|
|
use serde_derive::Deserialize;
|
|
|
|
#[derive(Clone, Debug, Deserialize)]
|
|
#[serde(deny_unknown_fields)]
|
|
pub struct RateLimit {
|
|
pub(in crate::config) name: String,
|
|
pub(in crate::config) number: usize,
|
|
pub(in crate::config) period: Duration,
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use crate::config::load_str;
|
|
|
|
#[test]
|
|
fn empty() {
|
|
let res = load_str::<RateLimit>("");
|
|
assert!(res.is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn ok() {
|
|
let cfg = r#"
|
|
name = "test"
|
|
number = 20
|
|
period = "20s"
|
|
"#;
|
|
|
|
let rl: RateLimit = load_str(cfg).unwrap();
|
|
assert_eq!(rl.name, "test");
|
|
assert_eq!(rl.number, 20);
|
|
assert_eq!(rl.period, Duration::from_secs(20));
|
|
}
|
|
|
|
#[test]
|
|
fn missing_name() {
|
|
let cfg = r#"
|
|
number = 20
|
|
period = "20s"
|
|
"#;
|
|
|
|
let res = load_str::<RateLimit>(cfg);
|
|
assert!(res.is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn missing_number() {
|
|
let cfg = r#"
|
|
name = "test"
|
|
period = "20s"
|
|
"#;
|
|
|
|
let res = load_str::<RateLimit>(cfg);
|
|
assert!(res.is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn missing_period() {
|
|
let cfg = r#"
|
|
name = "test"
|
|
number = 20
|
|
"#;
|
|
|
|
let res = load_str::<RateLimit>(cfg);
|
|
assert!(res.is_err());
|
|
}
|
|
}
|