fundaia 0.55.0

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

impl ApiClient {
    pub async fn gateway_rules(
        &self,
        service_environment_id: &str,
    ) -> Result<Answer<GatewayRulesPage>> {
        self.answer(
            Method::GET,
            &format!("/api/infra/services/{service_environment_id}/gateway-rules"),
            None::<&()>,
        )
        .await
    }

    pub async fn update_gateway_rules(
        &self,
        service_environment_id: &str,
        changes: &serde_json::Value,
    ) -> Result<Answer<GatewayRulesPage>> {
        self.answer(
            Method::PUT,
            &format!("/api/infra/services/{service_environment_id}/gateway-rules"),
            Some(changes),
        )
        .await
    }

    pub async fn preview_gateway_rules(
        &self,
        service_environment_id: &str,
        url: &str,
        method: Option<&str>,
        origin: Option<&str>,
    ) -> Result<Answer<GatewayRulePreview>> {
        let mut query = format!("?url={}", utf8_percent_encode(url, NON_ALPHANUMERIC));
        for (name, value) in [("method", method), ("origin", origin)] {
            if let Some(value) = value.map(str::trim).filter(|value| !value.is_empty()) {
                query.push_str(&format!(
                    "&{name}={}",
                    utf8_percent_encode(value, NON_ALPHANUMERIC)
                ));
            }
        }
        self.answer(
            Method::GET,
            &format!("/api/infra/services/{service_environment_id}/gateway-rules/preview{query}"),
            None::<&()>,
        )
        .await
    }
}