change return type from Limits to HashMap
This commit is contained in:
parent
b5b81aba26
commit
5cbbddf945
|
@ -1,9 +1,11 @@
|
||||||
pub mod limits {
|
pub mod limits {
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::from_str;
|
use serde_json::from_str;
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy, Eq, Hash, PartialEq)]
|
||||||
pub enum LimitType {
|
pub enum LimitType {
|
||||||
AuthRegister,
|
AuthRegister,
|
||||||
AuthLogin,
|
AuthLogin,
|
||||||
|
@ -180,7 +182,7 @@ pub mod limits {
|
||||||
|
|
||||||
/// check_limits uses the API to get the current request limits of the instance.
|
/// check_limits uses the API to get the current request limits of the instance.
|
||||||
/// It returns a `Limits` struct containing all the limits.
|
/// It returns a `Limits` struct containing all the limits.
|
||||||
pub async fn check_limits(api_url: String) -> Limits {
|
pub async fn check_limits(api_url: String) -> HashMap<LimitType, Limit> {
|
||||||
let client = Client::new();
|
let client = Client::new();
|
||||||
let url_parsed = crate::URLBundle::parse_url(api_url) + "/policies/instance/limits";
|
let url_parsed = crate::URLBundle::parse_url(api_url) + "/policies/instance/limits";
|
||||||
let result = client
|
let result = client
|
||||||
|
@ -198,151 +200,213 @@ pub mod limits {
|
||||||
});
|
});
|
||||||
let config: Config = from_str(&result).unwrap();
|
let config: Config = from_str(&result).unwrap();
|
||||||
// If config.rate.enabled is false, then add return a Limits struct with all limits set to u64::MAX
|
// If config.rate.enabled is false, then add return a Limits struct with all limits set to u64::MAX
|
||||||
let mut limits: Limits;
|
let mut limits: HashMap<LimitType, Limit> = HashMap::new();
|
||||||
if config.rate.enabled == false {
|
if config.rate.enabled == false {
|
||||||
limits = Limits {
|
limits.insert(
|
||||||
limit_absolute_messages: Limit {
|
LimitType::AbsoluteMessage,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::AbsoluteMessage,
|
bucket: LimitType::AbsoluteMessage,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_absolute_register: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::AbsoluteRegister,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::AbsoluteRegister,
|
bucket: LimitType::AbsoluteRegister,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_auth_login: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::AuthLogin,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::AuthLogin,
|
bucket: LimitType::AuthLogin,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_auth_register: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::AuthRegister,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::AuthRegister,
|
bucket: LimitType::AuthRegister,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_ip: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Ip,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Ip,
|
bucket: LimitType::Ip,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_global: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Global,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Global,
|
bucket: LimitType::Global,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_error: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Error,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Error,
|
bucket: LimitType::Error,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_guild: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Guild,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Guild,
|
bucket: LimitType::Guild,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_webhook: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Webhook,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Webhook,
|
bucket: LimitType::Webhook,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
limit_channel: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Channel,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Channel,
|
bucket: LimitType::Channel,
|
||||||
limit: u64::MAX,
|
limit: u64::MAX,
|
||||||
remaining: u64::MAX,
|
remaining: u64::MAX,
|
||||||
reset: u64::MAX,
|
reset: u64::MAX,
|
||||||
},
|
},
|
||||||
};
|
);
|
||||||
} else {
|
} else {
|
||||||
limits = Limits {
|
limits.insert(
|
||||||
limit_absolute_messages: Limit {
|
LimitType::AbsoluteMessage,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::AbsoluteMessage,
|
bucket: LimitType::AbsoluteMessage,
|
||||||
limit: config.absoluteRate.sendMessage.limit,
|
limit: config.absoluteRate.sendMessage.limit,
|
||||||
remaining: config.absoluteRate.sendMessage.limit,
|
remaining: config.absoluteRate.sendMessage.limit,
|
||||||
reset: config.absoluteRate.sendMessage.window,
|
reset: config.absoluteRate.sendMessage.window,
|
||||||
},
|
},
|
||||||
limit_absolute_register: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::AbsoluteRegister,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::AbsoluteRegister,
|
bucket: LimitType::AbsoluteRegister,
|
||||||
limit: config.absoluteRate.register.limit,
|
limit: config.absoluteRate.register.limit,
|
||||||
remaining: config.absoluteRate.register.limit,
|
remaining: config.absoluteRate.register.limit,
|
||||||
reset: config.absoluteRate.register.window,
|
reset: config.absoluteRate.register.window,
|
||||||
},
|
},
|
||||||
limit_auth_login: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::AuthLogin,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::AuthLogin,
|
bucket: LimitType::AuthLogin,
|
||||||
limit: config.rate.routes.auth.login.count,
|
limit: config.rate.routes.auth.login.count,
|
||||||
remaining: config.rate.routes.auth.login.count,
|
remaining: config.rate.routes.auth.login.count,
|
||||||
reset: config.rate.routes.auth.login.window,
|
reset: config.rate.routes.auth.login.window,
|
||||||
},
|
},
|
||||||
limit_auth_register: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::AuthRegister,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::AuthRegister,
|
bucket: LimitType::AuthRegister,
|
||||||
limit: config.rate.routes.auth.register.count,
|
limit: config.rate.routes.auth.register.count,
|
||||||
remaining: config.rate.routes.auth.register.count,
|
remaining: config.rate.routes.auth.register.count,
|
||||||
reset: config.rate.routes.auth.register.window,
|
reset: config.rate.routes.auth.register.window,
|
||||||
},
|
},
|
||||||
limit_guild: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Guild,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Guild,
|
bucket: LimitType::Guild,
|
||||||
limit: config.rate.routes.guild.count,
|
limit: config.rate.routes.guild.count,
|
||||||
remaining: config.rate.routes.guild.count,
|
remaining: config.rate.routes.guild.count,
|
||||||
reset: config.rate.routes.guild.window,
|
reset: config.rate.routes.guild.window,
|
||||||
},
|
},
|
||||||
limit_webhook: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Webhook,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Webhook,
|
bucket: LimitType::Webhook,
|
||||||
limit: config.rate.routes.webhook.count,
|
limit: config.rate.routes.webhook.count,
|
||||||
remaining: config.rate.routes.webhook.count,
|
remaining: config.rate.routes.webhook.count,
|
||||||
reset: config.rate.routes.webhook.window,
|
reset: config.rate.routes.webhook.window,
|
||||||
},
|
},
|
||||||
limit_channel: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Channel,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Channel,
|
bucket: LimitType::Channel,
|
||||||
limit: config.rate.routes.channel.count,
|
limit: config.rate.routes.channel.count,
|
||||||
remaining: config.rate.routes.channel.count,
|
remaining: config.rate.routes.channel.count,
|
||||||
reset: config.rate.routes.channel.window,
|
reset: config.rate.routes.channel.window,
|
||||||
},
|
},
|
||||||
limit_ip: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Ip,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Ip,
|
bucket: LimitType::Ip,
|
||||||
limit: config.rate.ip.count,
|
limit: config.rate.ip.count,
|
||||||
remaining: config.rate.ip.count,
|
remaining: config.rate.ip.count,
|
||||||
reset: config.rate.ip.window,
|
reset: config.rate.ip.window,
|
||||||
},
|
},
|
||||||
limit_global: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Global,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Global,
|
bucket: LimitType::Global,
|
||||||
limit: config.rate.global.count,
|
limit: config.rate.global.count,
|
||||||
remaining: config.rate.global.count,
|
remaining: config.rate.global.count,
|
||||||
reset: config.rate.global.window,
|
reset: config.rate.global.window,
|
||||||
},
|
},
|
||||||
limit_error: Limit {
|
);
|
||||||
|
limits.insert(
|
||||||
|
LimitType::Error,
|
||||||
|
Limit {
|
||||||
bucket: LimitType::Error,
|
bucket: LimitType::Error,
|
||||||
limit: config.rate.error.count,
|
limit: config.rate.error.count,
|
||||||
remaining: config.rate.error.count,
|
remaining: config.rate.error.count,
|
||||||
reset: config.rate.error.window,
|
reset: config.rate.error.window,
|
||||||
},
|
},
|
||||||
}
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if !config.absoluteRate.register.enabled {
|
if !config.absoluteRate.register.enabled {
|
||||||
limits.limit_absolute_register = Limit {
|
limits.insert(
|
||||||
bucket: LimitType::AbsoluteRegister,
|
LimitType::AbsoluteRegister,
|
||||||
limit: u64::MAX,
|
Limit {
|
||||||
remaining: u64::MAX,
|
bucket: LimitType::AbsoluteRegister,
|
||||||
reset: u64::MAX,
|
limit: u64::MAX,
|
||||||
};
|
remaining: u64::MAX,
|
||||||
|
reset: u64::MAX,
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if !config.absoluteRate.sendMessage.enabled {
|
if !config.absoluteRate.sendMessage.enabled {
|
||||||
limits.limit_absolute_messages = Limit {
|
limits.insert(
|
||||||
bucket: LimitType::AbsoluteMessage,
|
LimitType::AbsoluteMessage,
|
||||||
limit: u64::MAX,
|
Limit {
|
||||||
remaining: u64::MAX,
|
bucket: LimitType::AbsoluteMessage,
|
||||||
reset: u64::MAX,
|
limit: u64::MAX,
|
||||||
};
|
remaining: u64::MAX,
|
||||||
|
reset: u64::MAX,
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return limits;
|
return limits;
|
||||||
|
|
Loading…
Reference in New Issue