Remove limited argument from Instance

This commit is contained in:
bitfl0wer 2023-12-03 21:44:08 +01:00
parent dc1991a9cc
commit 565670c5b7
No known key found for this signature in database
GPG Key ID: 0ACD574FCF5226CF
1 changed files with 32 additions and 12 deletions

View File

@ -12,7 +12,9 @@ use crate::errors::ChorusResult;
use crate::gateway::{Gateway, GatewayHandle};
use crate::ratelimiter::ChorusRequest;
use crate::types::types::subconfigs::limits::rates::RateLimits;
use crate::types::{GeneralConfiguration, Limit, LimitType, User, UserSettings};
use crate::types::{
GeneralConfiguration, Limit, LimitType, LimitsConfiguration, User, UserSettings,
};
use crate::UrlBundle;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
@ -71,23 +73,24 @@ impl PartialEq for LimitsInformation {
impl Instance {
/// Creates a new [`Instance`] from the [relevant instance urls](UrlBundle), where `limited` is whether Chorus will track and enforce rate limits for this instance.
pub async fn new(urls: UrlBundle, limited: bool) -> ChorusResult<Instance> {
let limits_information;
if limited {
let limits_configuration = ChorusRequest::get_limits_config(&urls.api).await?.rate;
let limits = ChorusRequest::limits_config_to_hashmap(&limits_configuration);
limits_information = Some(LimitsInformation {
pub async fn new(urls: UrlBundle) -> ChorusResult<Instance> {
let is_limited: Option<LimitsConfiguration> = Instance::is_limited(&urls.api).await?;
let limit_information;
if let Some(limits_configuration) = is_limited {
let limits = ChorusRequest::limits_config_to_hashmap(&limits_configuration.rate);
limit_information = Some(LimitsInformation {
ratelimits: limits,
configuration: limits_configuration,
configuration: limits_configuration.rate,
});
} else {
limits_information = None;
limit_information = None
}
let mut instance = Instance {
urls: urls.clone(),
// Will be overwritten in the next step
instance_info: GeneralConfiguration::default(),
limits_information,
limits_information: limit_information,
client: Client::new(),
};
instance.instance_info = match instance.general_configuration_schema().await {
@ -111,9 +114,26 @@ impl Instance {
/// Shorthand for `Instance::new(UrlBundle::from_root_domain(root_domain).await?)`.
///
/// If `limited` is `true`, then Chorus will track and enforce rate limits for this instance.
pub async fn from_root_url(root_url: &str, limited: bool) -> ChorusResult<Instance> {
pub async fn from_root_url(root_url: &str) -> ChorusResult<Instance> {
let urls = UrlBundle::from_root_url(root_url).await?;
Instance::new(urls, limited).await
Instance::new(urls).await
}
pub async fn is_limited(api_url: &str) -> ChorusResult<Option<LimitsConfiguration>> {
let api_url = UrlBundle::parse_url(api_url.to_string());
let client = Client::new();
let request = client
.get(format!("{}/policies/instance/limits", &api_url))
.header(http::header::ACCEPT, "application/json")
.build()?;
let resp = match client.execute(request).await {
Ok(response) => response,
Err(_) => return Ok(None),
};
match resp.json::<LimitsConfiguration>().await {
Ok(limits) => Ok(Some(limits)),
Err(_) => Ok(None),
}
}
}