chorus/src/instance.rs

82 lines
2.4 KiB
Rust
Raw Normal View History

2023-04-25 17:32:30 +02:00
use crate::api::limits::Limits;
use crate::api::types::InstancePolicies;
2023-04-21 23:20:23 +02:00
use crate::errors::{FieldFormatError, InstanceServerError};
2023-04-16 22:16:22 +02:00
use crate::URLBundle;
2023-04-17 21:31:15 +02:00
use std::fmt;
2023-04-16 22:16:22 +02:00
#[derive(Debug, Clone)]
2023-04-16 23:03:12 +02:00
/**
The [`Instance`] what you will be using to perform all sorts of actions on the Spacebar server.
*/
pub struct Instance {
pub urls: URLBundle,
2023-04-25 17:32:30 +02:00
pub instance_info: InstancePolicies,
2023-04-24 19:49:26 +02:00
pub limits: Limits,
2023-04-16 23:03:12 +02:00
}
impl Instance {
/// Creates a new [`Instance`].
/// # Arguments
/// * `urls` - The [`URLBundle`] that contains all the URLs that are needed to connect to the Spacebar server.
/// * `requester` - The [`LimitedRequester`] that will be used to make requests to the Spacebar server.
/// # Errors
/// * [`InstanceError`] - If the instance cannot be created.
pub async fn new(urls: URLBundle) -> Result<Instance, InstanceServerError> {
let mut instance = Instance {
2023-04-24 19:49:26 +02:00
urls: urls.clone(),
2023-04-25 17:32:30 +02:00
instance_info: InstancePolicies::new(
// This is okay, because the instance_info will be overwritten by the instance_policies_schema() function.
"".to_string(),
None,
None,
None,
None,
None,
None,
None,
),
2023-04-24 19:49:26 +02:00
limits: Limits::check_limits(urls.api).await,
};
instance.instance_info = match instance.instance_policies_schema().await {
Ok(schema) => schema,
2023-04-21 23:20:23 +02:00
Err(e) => {
return Err(InstanceServerError::CantGetInfoError {
error: e.to_string(),
})
}
};
Ok(instance)
}
}
#[derive(Debug, PartialEq, Eq)]
2023-04-21 23:20:23 +02:00
pub struct Token {
pub token: String,
}
2023-04-21 23:20:23 +02:00
impl fmt::Display for Token {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2023-04-21 23:20:23 +02:00
write!(f, "{}", self.token)
}
2023-04-16 22:16:22 +02:00
}
2023-04-17 21:31:15 +02:00
2023-04-17 22:38:21 +02:00
#[derive(Debug, PartialEq, Eq)]
pub struct Username {
pub username: String,
}
impl Username {
/// Creates a new [`Username`].
/// # Arguments
/// * `username` - The username that will be used to create the [`Username`].
/// # Errors
/// * [`UsernameFormatError`] - If the username is not between 2 and 32 characters.
2023-04-21 23:20:23 +02:00
pub fn new(username: String) -> Result<Username, FieldFormatError> {
2023-04-17 22:38:21 +02:00
if username.len() < 2 || username.len() > 32 {
2023-04-21 23:20:23 +02:00
return Err(FieldFormatError::UsernameError);
2023-04-17 21:31:15 +02:00
}
2023-04-25 17:41:14 +02:00
Ok(Username { username })
2023-04-17 21:31:15 +02:00
}
}