diff --git a/src/api/auth/login.rs b/src/api/auth/login.rs index 453ff1b..8589b39 100644 --- a/src/api/auth/login.rs +++ b/src/api/auth/login.rs @@ -6,17 +6,16 @@ pub mod login { use serde_json::{from_str, json}; use crate::api::limits::LimitType; - use crate::api::schemas::LoginSchema; - use crate::api::types::{ErrorResponse, LoginResult}; use crate::errors::InstanceServerError; - use crate::instance::Instance; + use crate::instance::{Instance, UserMeta}; use crate::limit::LimitedRequester; + use crate::types::{ErrorResponse, LoginResult, LoginSchema}; impl Instance { pub async fn login_account( &mut self, login_schema: &LoginSchema, - ) -> Result { + ) -> Result { let mut requester = LimitedRequester::new().await; let json_schema = json!(login_schema); let client = Client::new(); @@ -59,7 +58,7 @@ pub mod login { .get_user(login_result.token.clone(), None) .await .unwrap(); - let user = crate::api::types::User::new( + let user = UserMeta::new( Rc::new(RefCell::new(self.clone())), login_result.token, cloned_limits, diff --git a/src/api/auth/register.rs b/src/api/auth/register.rs index edafc5d..cff1629 100644 --- a/src/api/auth/register.rs +++ b/src/api/auth/register.rs @@ -5,10 +5,11 @@ pub mod register { use serde_json::{from_str, json}; use crate::{ - api::{limits::LimitType, schemas::RegisterSchema, types::ErrorResponse, Token}, + api::limits::LimitType, errors::InstanceServerError, - instance::Instance, + instance::{Instance, Token, UserMeta}, limit::LimitedRequester, + types::{ErrorResponse, RegisterSchema}, }; impl Instance { @@ -22,7 +23,7 @@ pub mod register { pub async fn register_account( &mut self, register_schema: &RegisterSchema, - ) -> Result { + ) -> Result { let json_schema = json!(register_schema); let mut limited_requester = LimitedRequester::new().await; let client = Client::new(); @@ -62,14 +63,11 @@ pub mod register { return Err(InstanceServerError::InvalidFormBodyError { error_type, error }); } let user_object = self.get_user(token.clone(), None).await.unwrap(); - let settings = crate::api::types::User::get_settings( - &token, - &self.urls.get_api().to_string(), - &mut self.limits, - ) - .await - .unwrap(); - let user: crate::api::types::User = crate::api::types::User::new( + let settings = + UserMeta::get_settings(&token, &self.urls.get_api().to_string(), &mut self.limits) + .await + .unwrap(); + let user: UserMeta = UserMeta::new( Rc::new(RefCell::new(self.clone())), token.clone(), cloned_limits, @@ -83,9 +81,9 @@ pub mod register { #[cfg(test)] mod test { - use crate::api::schemas::{AuthUsername, RegisterSchema}; use crate::instance::Instance; use crate::limit::LimitedRequester; + use crate::types::RegisterSchema; use crate::URLBundle; #[tokio::test] @@ -98,7 +96,7 @@ mod test { let limited_requester = LimitedRequester::new().await; let mut test_instance = Instance::new(urls.clone()).await.unwrap(); let reg = RegisterSchema::new( - AuthUsername::new("Hiiii".to_string()).unwrap(), + "Hiiii".to_string(), None, true, None, diff --git a/src/api/channels/channels.rs b/src/api/channels/channels.rs index dab5eb7..aba4725 100644 --- a/src/api/channels/channels.rs +++ b/src/api/channels/channels.rs @@ -1,9 +1,11 @@ use reqwest::Client; use serde_json::from_str; -use crate::{api::limits::Limits, errors::InstanceServerError, limit::LimitedRequester}; +use crate::{ + api::limits::Limits, errors::InstanceServerError, limit::LimitedRequester, types::Channel, +}; -impl types::Channel { +impl Channel { pub async fn get( token: &str, url_api: &str, @@ -28,7 +30,7 @@ impl types::Channel { Err(e) => return Err(e), }; let result_text = result.text().await.unwrap(); - match from_str::(&result_text) { + match from_str::(&result_text) { Ok(object) => Ok(object), Err(e) => Err(InstanceServerError::RequestErrorError { url: format!("{}/channels/{}/", url_api, channel_id), diff --git a/src/api/channels/messages.rs b/src/api/channels/messages.rs index 0aaf8d1..7e20ab5 100644 --- a/src/api/channels/messages.rs +++ b/src/api/channels/messages.rs @@ -5,8 +5,9 @@ pub mod messages { use serde_json::to_string; use crate::api::limits::Limits; - use crate::api::types::{Message, PartialDiscordFileAttachment, User}; + use crate::instance::UserMeta; use crate::limit::LimitedRequester; + use crate::types::{Message, MessageSendSchema, PartialDiscordFileAttachment, User}; impl Message { /** @@ -23,7 +24,7 @@ pub mod messages { pub async fn send<'a>( url_api: String, channel_id: String, - message: &mut crate::api::schemas::MessageSendSchema, + message: &mut MessageSendSchema, files: Option>, token: String, limits_user: &mut Limits, @@ -91,10 +92,10 @@ pub mod messages { } } - impl User { + impl UserMeta { pub async fn send_message( &mut self, - message: &mut crate::api::schemas::MessageSendSchema, + message: &mut MessageSendSchema, channel_id: String, files: Option>, ) -> Result { @@ -116,11 +117,9 @@ pub mod messages { #[cfg(test)] mod test { - use crate::{ - api::{AuthUsername, LoginSchema}, - instance::Instance, - limit::LimitedRequester, - }; + use crate::instance::UserMeta; + use crate::types::{LoginSchema, MessageSendSchema, PartialDiscordFileAttachment}; + use crate::{instance::Instance, limit::LimitedRequester}; use std::io::Read; use std::{cell::RefCell, fs::File}; @@ -129,7 +128,7 @@ mod test { #[tokio::test] async fn send_message() { let channel_id = "1106954414356168802".to_string(); - let mut message = crate::api::schemas::MessageSendSchema::new( + let mut message = MessageSendSchema::new( None, Some("A Message!".to_string()), None, @@ -149,7 +148,7 @@ mod test { .await .unwrap(); let login_schema: LoginSchema = LoginSchema::new( - AuthUsername::new("user@test.xyz".to_string()).unwrap(), + "user@test.xyz".to_string(), "transrights".to_string(), None, None, @@ -162,7 +161,7 @@ mod test { println!("TOKEN: {}", token); let settings = login_result.settings; let limits = instance.limits.clone(); - let mut user = crate::api::types::User::new( + let mut user = UserMeta::new( Rc::new(RefCell::new(instance)), token, limits, @@ -185,7 +184,7 @@ mod test { reader.read_to_end(&mut buffer).unwrap(); - let attachment = crate::api::types::PartialDiscordFileAttachment { + let attachment = PartialDiscordFileAttachment { id: None, filename: "README.md".to_string(), description: None, @@ -201,7 +200,7 @@ mod test { content: buffer, }; - let mut message = crate::api::schemas::MessageSendSchema::new( + let mut message = MessageSendSchema::new( None, Some("trans rights now".to_string()), None, @@ -221,7 +220,7 @@ mod test { .await .unwrap(); let login_schema: LoginSchema = LoginSchema::new( - AuthUsername::new("user@test.xyz".to_string()).unwrap(), + "user@test.xyz".to_string(), "transrights".to_string(), None, None, @@ -233,7 +232,7 @@ mod test { let token = login_result.token; let settings = login_result.settings; let limits = instance.limits.clone(); - let mut user = crate::api::types::User::new( + let mut user = UserMeta::new( Rc::new(RefCell::new(instance)), token, limits, diff --git a/src/api/guilds/guilds.rs b/src/api/guilds/guilds.rs index 21140f1..00cbfc1 100644 --- a/src/api/guilds/guilds.rs +++ b/src/api/guilds/guilds.rs @@ -3,12 +3,16 @@ use serde_json::from_str; use serde_json::to_string; use crate::api::limits::Limits; -use crate::api::schemas; -use crate::api::types; use crate::errors::InstanceServerError; +use crate::instance::UserMeta; use crate::limit::LimitedRequester; +use crate::types::Channel; +use crate::types::ChannelCreateSchema; +use crate::types::Guild; +use crate::types::GuildCreateResponse; +use crate::types::GuildCreateSchema; -impl types::Guild { +impl Guild { /// Creates a new guild with the given parameters. /// /// # Arguments @@ -38,9 +42,9 @@ impl types::Guild { /// } /// ``` pub async fn create( - user: &mut types::User, + user: &mut UserMeta, url_api: &str, - guild_create_schema: schemas::GuildCreateSchema, + guild_create_schema: GuildCreateSchema, ) -> Result { let url = format!("{}/guilds/", url_api); let limits_user = user.limits.get_as_mut(); @@ -62,7 +66,7 @@ impl types::Guild { Ok(result) => result, Err(e) => return Err(e), }; - let id: types::GuildCreateResponse = from_str(&result.text().await.unwrap()).unwrap(); + let id: GuildCreateResponse = from_str(&result.text().await.unwrap()).unwrap(); Ok(id.id) } @@ -91,7 +95,7 @@ impl types::Guild { /// } /// ``` pub async fn delete( - user: &mut types::User, + user: &mut UserMeta, url_api: &str, guild_id: String, ) -> Option { @@ -134,14 +138,14 @@ impl types::Guild { &self, url_api: &str, token: &str, - schema: schemas::ChannelCreateSchema, + schema: ChannelCreateSchema, limits_user: &mut Limits, limits_instance: &mut Limits, - ) -> Result { - types::Channel::create( + ) -> Result { + Channel::create( token, url_api, - &self.id, + &self.id.to_string(), schema, limits_user, limits_instance, @@ -150,7 +154,7 @@ impl types::Guild { } } -impl types::Channel { +impl Channel { /// Sends a request to create a new channel in a guild. /// /// # Arguments @@ -169,10 +173,10 @@ impl types::Channel { token: &str, url_api: &str, guild_id: &str, - schema: schemas::ChannelCreateSchema, + schema: ChannelCreateSchema, limits_user: &mut Limits, limits_instance: &mut Limits, - ) -> Result { + ) -> Result { let request = Client::new() .post(format!("{}/guilds/{}/channels/", url_api, guild_id)) .bearer_auth(token) @@ -190,7 +194,7 @@ impl types::Channel { Ok(result) => result, Err(e) => return Err(e), }; - match from_str::(&result.text().await.unwrap()) { + match from_str::(&result.text().await.unwrap()) { Ok(object) => Ok(object), Err(e) => Err(InstanceServerError::RequestErrorError { url: format!("{}/guilds/{}/channels/", url_api, guild_id), diff --git a/src/api/users/users.rs b/src/api/users/users.rs index 48f7019..4113c6b 100644 --- a/src/api/users/users.rs +++ b/src/api/users/users.rs @@ -6,7 +6,7 @@ use crate::{ errors::InstanceServerError, instance::{Instance, UserMeta}, limit::LimitedRequester, - types::{User, UserModifySchema}, + types::{User, UserModifySchema, UserSettings}, }; impl UserMeta { @@ -56,7 +56,7 @@ impl UserMeta { token: &String, url_api: &String, instance_limits: &mut Limits, - ) -> Result { + ) -> Result { let request: reqwest::RequestBuilder = Client::new() .get(format!("{}/users/@me/settings/", url_api)) .bearer_auth(token); diff --git a/src/instance.rs b/src/instance.rs index b820815..ce8849d 100644 --- a/src/instance.rs +++ b/src/instance.rs @@ -1,3 +1,5 @@ +use serde::{Deserialize, Serialize}; + use crate::api::limits::Limits; use crate::errors::{FieldFormatError, InstanceServerError}; use crate::types::{GeneralConfiguration, User, UserSettings}; @@ -52,7 +54,7 @@ impl Instance { } } -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct Token { pub token: String, } diff --git a/tests/integration.rs b/tests/integration.rs index 045dc08..6713afe 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -1,14 +1,13 @@ use chorus::{ - api::schemas, - api::{AuthUsername, Channel, Guild, GuildCreateSchema, RegisterSchema, User}, - instance::Instance, + instance::{Instance, UserMeta}, + types::{Channel, ChannelCreateSchema, Guild, GuildCreateSchema, RegisterSchema, User}, URLBundle, }; #[derive(Debug)] struct TestBundle { urls: URLBundle, - user: User, + user: UserMeta, instance: Instance, guild_id: String, channel: Channel, @@ -24,7 +23,7 @@ async fn setup() -> TestBundle { let mut instance = Instance::new(urls.clone()).await.unwrap(); // Requires the existance of the below user. let reg = RegisterSchema::new( - AuthUsername::new("integrationtestuser".to_string()).unwrap(), + "integrationtestuser".to_string(), None, true, None, @@ -45,7 +44,7 @@ async fn setup() -> TestBundle { system_channel_id: None, rules_channel_id: None, }; - let channel_create_schema = schemas::ChannelCreateSchema { + let channel_create_schema = ChannelCreateSchema { name: "testchannel".to_string(), channel_type: Some(0), topic: None, @@ -101,13 +100,13 @@ async fn teardown(mut bundle: TestBundle) { } mod guild { - use chorus::api::{schemas, types, Channel}; + use chorus::types::{Channel, Guild, GuildCreateSchema}; #[tokio::test] async fn guild_creation_deletion() { let mut bundle = crate::setup().await; - let guild_create_schema = schemas::GuildCreateSchema { + let guild_create_schema = GuildCreateSchema { name: Some("test".to_string()), region: None, icon: None, @@ -117,14 +116,13 @@ mod guild { rules_channel_id: None, }; - let guild = - types::Guild::create(&mut bundle.user, bundle.urls.get_api(), guild_create_schema) - .await - .unwrap(); + let guild = Guild::create(&mut bundle.user, bundle.urls.get_api(), guild_create_schema) + .await + .unwrap(); println!("{}", guild); - match types::Guild::delete(&mut bundle.user, bundle.urls.get_api(), guild).await { + match Guild::delete(&mut bundle.user, bundle.urls.get_api(), guild).await { None => assert!(true), Some(_) => assert!(false), } @@ -142,7 +140,7 @@ mod guild { Channel::get( bundle_user.token.as_str(), bundle.instance.urls.get_api(), - &bundle_channel.id, + &bundle_channel.id.to_string(), &mut bundle_user.limits, &mut bundle.instance.limits )