use crate::{FilesClient, Result};
use serde::{Deserialize, Serialize};
use serde_json::json;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionEntity {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub read_only: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sftp_insecure_ciphers: Option<bool>,
}
#[derive(Debug, Clone)]
pub struct SessionHandler {
client: FilesClient,
}
impl SessionHandler {
pub fn new(client: FilesClient) -> Self {
Self { client }
}
pub async fn create(
&self,
username: &str,
password: &str,
otp: Option<&str>,
) -> Result<SessionEntity> {
let mut body = json!({
"username": username,
"password": password,
});
if let Some(o) = otp {
body["otp"] = json!(o);
}
let response = self.client.post_raw("/sessions", body).await?;
Ok(serde_json::from_value(response)?)
}
pub async fn delete(&self) -> Result<()> {
self.client.delete_raw("/sessions").await?;
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_handler_creation() {
let client = FilesClient::builder().api_key("test-key").build().unwrap();
let _handler = SessionHandler::new(client);
}
}