use serde::Deserialize;
use super::VectorizerClient;
use crate::error::{Result, VectorizerError};
use crate::models::*;
#[derive(Debug, Deserialize)]
struct LoginResponse {
access_token: String,
}
#[derive(Debug, Clone)]
pub struct JwtToken {
pub access_token: String,
}
impl VectorizerClient {
pub async fn health_check(&self) -> Result<HealthStatus> {
let response = self.make_request("GET", "/health", None).await?;
let health: HealthStatus = serde_json::from_str(&response).map_err(|e| {
VectorizerError::server(format!("Failed to parse health check response: {e}"))
})?;
Ok(health)
}
pub async fn login(&self, username: &str, password: &str) -> Result<JwtToken> {
let payload = serde_json::json!({
"username": username,
"password": password,
});
let response = self
.make_request("POST", "/auth/login", Some(payload))
.await?;
let parsed: LoginResponse = serde_json::from_str(&response)
.map_err(|e| VectorizerError::server(format!("Failed to parse login response: {e}")))?;
Ok(JwtToken {
access_token: parsed.access_token,
})
}
}