fundaia 0.52.2

Command line for the Fundaia deployment platform: projects, services, variables, deployments, logs and metrics
use super::*;

impl ApiClient {
    pub async fn domains(&self, service_environment_id: &str) -> Result<Vec<Domain>> {
        Ok(self
            .get::<DomainsPage>(&format!(
                "/api/infra/services/{service_environment_id}/domains"
            ))
            .await?
            .domains)
    }

    pub async fn add_domain(
        &self,
        service_environment_id: &str,
        host: Option<&str>,
    ) -> Result<Domain> {
        #[derive(serde::Deserialize)]
        struct Added {
            domain: Domain,
        }

        let body = match host {
            Some(host) => serde_json::json!({ "host": host }),
            None => serde_json::json!({}),
        };

        Ok(self
            .post::<Added, _>(
                &format!("/api/infra/services/{service_environment_id}/domains"),
                &body,
            )
            .await?
            .domain)
    }

    pub async fn remove_domain(&self, domain_id: &str) -> Result<()> {
        self.delete(&format!("/api/infra/domains/{domain_id}"))
            .await
    }

    pub async fn verify_domain(&self, domain_id: &str) -> Result<Domain> {
        #[derive(serde::Deserialize)]
        struct Verified {
            domain: Domain,
        }

        Ok(self
            .post_empty::<Verified>(&format!("/api/infra/domains/{domain_id}/verify"))
            .await?
            .domain)
    }
}