synd-client 0.4.0

syndicationd API client
Documentation
use synd_protocol::daemon::DaemonStatusResponse;
use synd_support::o11y::health_check::Health;

use super::Client;
use crate::SyndApiError;

const HEALTH_CHECK_PATH: &str = "/health";
const DAEMON_STATUS_PATH: &str = synd_protocol::daemon::STATUS_PATH;
const DAEMON_SHUTDOWN_PATH: &str = "/daemon/shutdown";

impl Client {
    pub async fn health(&self) -> Result<Health, SyndApiError> {
        self.client
            .get(self.endpoint.join(HEALTH_CHECK_PATH)?)
            .send()
            .await
            .map_err(SyndApiError::from_send_error)?
            .error_for_status()
            .map_err(SyndApiError::from_status_error)?
            .json()
            .await
            .map_err(SyndApiError::DecodeResponse)
    }

    pub async fn shutdown_daemon(&self) -> Result<(), SyndApiError> {
        self.client
            .post(self.endpoint.join(DAEMON_SHUTDOWN_PATH)?)
            .send()
            .await
            .map_err(SyndApiError::from_send_error)?
            .error_for_status()
            .map_err(SyndApiError::from_status_error)?;

        Ok(())
    }

    pub async fn daemon_status(&self) -> Result<DaemonStatusResponse, SyndApiError> {
        self.client
            .get(self.endpoint.join(DAEMON_STATUS_PATH)?)
            .send()
            .await
            .map_err(SyndApiError::from_send_error)?
            .error_for_status()
            .map_err(SyndApiError::from_status_error)?
            .json()
            .await
            .map_err(SyndApiError::DecodeResponse)
    }
}