reasoninglayer 0.2.1

Rust client SDK for the Reasoning Layer API
Documentation
//! Scenarios.

use crate::error::Error;
use crate::http::HttpClient;
use crate::types::common::RequestOptions;
use crate::types::scenarios::{
    CreateScenarioRequest, CreateScenarioResponse, GetScenarioResponse, ListScenariosResponse,
    UpdateScenarioRequest, UpdateScenarioResponse, VerifyScenarioRequest, VerifyScenarioResponse,
};

#[derive(Debug, Clone)]
pub struct ScenariosClient {
    http: HttpClient,
}

impl ScenariosClient {
    pub(crate) fn new(http: HttpClient) -> Self {
        Self { http }
    }

    pub async fn create(
        &self,
        request: CreateScenarioRequest,
        options: Option<&RequestOptions>,
    ) -> Result<CreateScenarioResponse, Error> {
        self.http.post("/scenarios", &request, options).await
    }

    pub async fn list(
        &self,
        options: Option<&RequestOptions>,
    ) -> Result<ListScenariosResponse, Error> {
        self.http.get("/scenarios", None, options).await
    }

    pub async fn get(
        &self,
        id: &str,
        options: Option<&RequestOptions>,
    ) -> Result<GetScenarioResponse, Error> {
        let path = format!("/scenarios/{}", encode(id));
        self.http.get(&path, None, options).await
    }

    pub async fn update(
        &self,
        id: &str,
        request: UpdateScenarioRequest,
        options: Option<&RequestOptions>,
    ) -> Result<UpdateScenarioResponse, Error> {
        let path = format!("/scenarios/{}", encode(id));
        self.http.patch(&path, &request, options).await
    }

    pub async fn verify(
        &self,
        id: &str,
        request: VerifyScenarioRequest,
        options: Option<&RequestOptions>,
    ) -> Result<VerifyScenarioResponse, Error> {
        let path = format!("/scenarios/{}/verify", encode(id));
        self.http.post(&path, &request, options).await
    }
}

fn encode(s: &str) -> String {
    url::form_urlencoded::byte_serialize(s.as_bytes()).collect()
}