/* * This file is part of laurelin_client * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use serde::{Deserialize, Serialize}; use crate::NetworkingOptions; use super::User; #[derive(Deserialize)] struct LoginResponseJson { id: String, created_at: String, updated_at: String, username: String, token: String, } impl LoginResponseJson { fn to_user(&self) -> User { User { id: self.id.clone(), created_at: self.created_at.clone(), updated_at: self.updated_at.clone(), username: self.username.clone(), } } } pub type LoginResponse = Result; #[derive(Serialize)] struct LoginPost { email: String, password: String, } pub fn login(no: &mut NetworkingOptions, email: &str, password: &str) -> LoginResponse { let res = no.req .post(&format!("{}/user/token", &no.api_address)) .json(&LoginPost { email: email.to_string(), password: password.to_string(), }) .send() .unwrap(); let tmp: LoginResponseJson = res.json().unwrap(); no.user_token = tmp.token.clone(); Ok(tmp.to_user()) }