use async_trait::async_trait;
use crate::Context;
use crate::Error;
use crate::model::HealthcheckResponse;
use crate::model::VersionInfo;
pub enum HealthCheckError {
}
#[async_trait]
pub trait HealthCheckClient {
async fn healthcheck(&self) -> Result<HealthcheckResponse, Error<HealthCheckError>>;
async fn version(&self) -> Result<VersionInfo, Error<HealthCheckError>>;
}
pub struct HealthCheckClientLive {
pub context: Context,
}
#[async_trait]
impl HealthCheckClient for HealthCheckClientLive {
async fn healthcheck(&self) -> Result<HealthcheckResponse, Error<HealthCheckError>> {
let mut url = self.context.base_url.clone();
url.path_segments_mut().unwrap()
.push("healthcheck");
let mut request = self
.context
.client
.get(url.clone());
{
tracing::info!(method="get", endpoint="/healthcheck", url=url.to_string(), "healthcheck");
}
if let Some(token) = self.context.bearer_token() {
request = request.bearer_auth(token);
}
let response = request.send().await?;
let status = response.status().as_u16();
match status {
200 => {
Ok(response.json::<HealthcheckResponse>().await?)
}
_ => Err(Error::unexpected(status, response.bytes().await?)),
}
}
async fn version(&self) -> Result<VersionInfo, Error<HealthCheckError>> {
let mut url = self.context.base_url.clone();
url.path_segments_mut().unwrap()
.push("version");
let mut request = self
.context
.client
.get(url.clone());
{
tracing::info!(method="get", endpoint="/version", url=url.to_string(), "version");
}
if let Some(token) = self.context.bearer_token() {
request = request.bearer_auth(token);
}
let response = request.send().await?;
let status = response.status().as_u16();
match status {
200 => {
Ok(response.json::<VersionInfo>().await?)
}
_ => Err(Error::unexpected(status, response.bytes().await?)),
}
}
}