implement getting InstancePoliciesSchema
Co-authored-by: sky <skyrina@users.noreply.github.com>
This commit is contained in:
parent
d4ea4bd096
commit
c5b9e0efee
|
@ -0,0 +1,81 @@
|
||||||
|
pub mod instance {
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
use reqwest::Client;
|
||||||
|
use serde_json::from_str;
|
||||||
|
|
||||||
|
use crate::{api::schemas::schemas::InstancePoliciesSchema, instance::Instance};
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
pub struct InstancePoliciesError {
|
||||||
|
pub message: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl InstancePoliciesError {
|
||||||
|
fn new(message: String) -> Self {
|
||||||
|
InstancePoliciesError { message }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for InstancePoliciesError {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "{}", self.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::error::Error for InstancePoliciesError {}
|
||||||
|
impl Instance {
|
||||||
|
/// Gets the instance policies schema.
|
||||||
|
/// # Errors
|
||||||
|
/// * [`InstancePoliciesError`] - If the request fails.
|
||||||
|
pub async fn instance_policies_schema(
|
||||||
|
&self,
|
||||||
|
) -> Result<InstancePoliciesSchema, InstancePoliciesError> {
|
||||||
|
let client = Client::new();
|
||||||
|
let endpoint_url = self.urls.get_api().to_string() + "/policies/instance/";
|
||||||
|
let request = match client.get(&endpoint_url).send().await {
|
||||||
|
Ok(result) => result,
|
||||||
|
Err(e) => {
|
||||||
|
return Err(InstancePoliciesError {
|
||||||
|
message: format!(
|
||||||
|
"An error occured while trying to GET from {}: {}",
|
||||||
|
endpoint_url, e
|
||||||
|
),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if request.status().as_str().chars().next().unwrap() != '2' {
|
||||||
|
return Err(InstancePoliciesError {
|
||||||
|
message: format!(
|
||||||
|
"Received the following error code while requesting from the route: {}",
|
||||||
|
request.status().as_str()
|
||||||
|
),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let body = request.text().await.unwrap();
|
||||||
|
let instance_policies_schema: InstancePoliciesSchema = from_str(&body).unwrap();
|
||||||
|
Ok(instance_policies_schema)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod instance_policies_schema_test {
|
||||||
|
use crate::{instance::Instance, limit::LimitedRequester, URLBundle};
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn generate_instance_policies_schema() {
|
||||||
|
let urls = URLBundle::new(
|
||||||
|
"http://localhost:3001/api".to_string(),
|
||||||
|
"http://localhost:3001".to_string(),
|
||||||
|
"http://localhost:3001".to_string(),
|
||||||
|
);
|
||||||
|
let limited_requester = LimitedRequester::new(urls.get_api().to_string()).await;
|
||||||
|
let test_instance = Instance::new(urls.clone(), limited_requester).unwrap();
|
||||||
|
|
||||||
|
let schema = test_instance.instance_policies_schema().await.unwrap();
|
||||||
|
println!("{}", schema);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue