use std::sync::{Arc, RwLock};
use reqwest::Client;
use serde_json::to_string;
use crate::gateway::{Gateway, GatewayHandle};
use crate::types::{ClientProperties, GatewayIdentifyPayload, Shared, User};
use crate::{
errors::ChorusResult,
instance::{ChorusUser, Instance, Token},
ratelimiter::ChorusRequest,
types::LimitType,
types::RegisterSchema,
};
impl Instance {
pub async fn register_account(
instance: Shared<Instance>,
register_schema: RegisterSchema,
) -> ChorusResult<ChorusUser> {
let endpoint_url = instance.read().unwrap().urls.api.clone() + "/auth/register";
let chorus_request = ChorusRequest {
request: Client::new().post(endpoint_url).json(®ister_schema),
limit_type: LimitType::AuthRegister,
}
.with_client_properties(&ClientProperties::default());
let mut user = ChorusUser::shell(instance, "None").await;
let token = chorus_request
.send_and_deserialize_response::<Token>(&mut user)
.await?
.token;
user.update_with_login_data(token, None).await?;
Ok(user)
}
}