mod client;
mod error;
pub(crate) mod utilities;
pub mod models;
pub mod parameters;
use std::fmt::Display;
pub use client::Api;
pub use error::Error;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq)]
pub enum LoginState {
LoggedIn {
credentials: Credentials,
cookie_sid: String,
},
NotLoggedIn {
credentials: Credentials,
},
CookieProvided {
cookie_sid: String,
},
#[default]
Unknown,
}
impl LoginState {
fn as_cookie(&self) -> Option<String> {
match self {
Self::LoggedIn { cookie_sid, .. } => Some(cookie_sid.to_string()),
Self::NotLoggedIn { .. } => None,
Self::CookieProvided { cookie_sid } => Some(cookie_sid.to_string()),
Self::Unknown => None,
}
}
fn as_credentials(&self) -> Option<&Credentials> {
let creds = match self {
Self::LoggedIn { credentials, .. } => Some(credentials),
Self::NotLoggedIn { credentials } => Some(credentials),
Self::CookieProvided { .. } => return None,
Self::Unknown => return None,
};
if creds.unwrap().is_empty() {
return None;
}
creds
}
fn add_cookie(&self, cookie: &str) -> Self {
match self {
Self::LoggedIn { credentials, .. } => Self::LoggedIn {
cookie_sid: cookie.to_string(),
credentials: credentials.clone(),
},
Self::NotLoggedIn { credentials } => Self::LoggedIn {
cookie_sid: cookie.to_string(),
credentials: credentials.clone(),
},
Self::CookieProvided { .. } => Self::CookieProvided {
cookie_sid: cookie.to_string(),
},
Self::Unknown => Self::CookieProvided {
cookie_sid: cookie.to_string(),
},
}
}
}
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq)]
pub struct Credentials {
username: String,
password: String,
}
impl Credentials {
pub fn new(username: impl Into<String>, password: impl Into<String>) -> Self {
Self {
username: username.into(),
password: password.into(),
}
}
fn is_empty(&self) -> bool {
self.username.is_empty() || self.password.is_empty()
}
}
impl Display for Credentials {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "username={}&password={}", self.username, self.password)
}
}