flipt 1.4.0

Flipt Server SDK
Documentation
pub mod models;

use crate::{error::UpstreamError, util::deserialize};
use models::{
    BatchEvaluationRequest, BatchEvaluationResponse, BooleanEvaluationResponse, EvaluationRequest,
    VariantEvaluationResponse,
};
use reqwest::Client;
use url::Url;

pub struct Evaluation {
    client: Client,
    url: Url,
}

impl Evaluation {
    pub fn new(client: Client, url: Url) -> Self {
        Self { client, url }
    }

    pub async fn boolean(
        &self,
        request: &EvaluationRequest,
    ) -> Result<BooleanEvaluationResponse, UpstreamError> {
        let endpoint = format!("{}evaluate/v1/boolean", self.url.as_str());

        let response = match self.client.post(endpoint).json(request).send().await {
            Ok(r) => r,
            Err(e) => {
                return Err(UpstreamError::default_with_message(e.to_string()));
            }
        };

        deserialize(response).await
    }

    pub async fn variant(
        &self,
        request: &EvaluationRequest,
    ) -> Result<VariantEvaluationResponse, UpstreamError> {
        let endpoint = format!("{}evaluate/v1/variant", self.url.as_str());

        let response = match self.client.post(endpoint).json(request).send().await {
            Ok(r) => r,
            Err(e) => {
                return Err(UpstreamError::default_with_message(e.to_string()));
            }
        };

        deserialize(response).await
    }

    pub async fn batch(
        &self,
        batch: &BatchEvaluationRequest,
    ) -> Result<BatchEvaluationResponse, UpstreamError> {
        let endpoint = format!("{}evaluate/v1/batch", self.url.as_str());

        let response = match self.client.post(endpoint).json(batch).send().await {
            Ok(r) => r,
            Err(e) => {
                return Err(UpstreamError::default_with_message(e.to_string()));
            }
        };

        deserialize(response).await
    }
}