reasoninglayer 1.0.3

Rust client SDK for the Reasoning Layer API
Documentation
//! Analysis / FCA (sort discovery + attribute exploration).

use crate::error::Error;
use crate::http::HttpClient;
use crate::api_spec::{
    ConfirmResponseDto as ConfirmResponse,
    ExplorationCompleteResponseDto as ExplorationCompleteResponse,
    ExplorationStatusResponseDto as ExplorationStatusResponse, RefuteRequestDto as RefuteRequest,
    RefuteResponseDto as RefuteResponse, SortDiscoveryRequestDto as SortDiscoveryRequest,
    SortDiscoveryResponseDto as SortDiscoveryResponse,
    StartExplorationRequestDto as StartExplorationRequest,
    StartExplorationResponseDto as StartExplorationResponse,
};
use crate::types::common::RequestOptions;

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

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

    pub async fn sort_discovery(
        &self,
        request: SortDiscoveryRequest,
        options: Option<&RequestOptions>,
    ) -> Result<SortDiscoveryResponse, Error> {
        self.http
            .post("/analysis/sort-discovery", &request, options)
            .await
    }

    pub async fn start_exploration(
        &self,
        request: StartExplorationRequest,
        options: Option<&RequestOptions>,
    ) -> Result<StartExplorationResponse, Error> {
        self.http
            .post("/analysis/attribute-exploration/start", &request, options)
            .await
    }

    pub async fn confirm_implication(
        &self,
        session_id: &str,
        options: Option<&RequestOptions>,
    ) -> Result<ConfirmResponse, Error> {
        let path = format!(
            "/analysis/attribute-exploration/{}/confirm",
            encode(session_id)
        );
        self.http.post(&path, &serde_json::json!({}), options).await
    }

    pub async fn refute_implication(
        &self,
        session_id: &str,
        request: RefuteRequest,
        options: Option<&RequestOptions>,
    ) -> Result<RefuteResponse, Error> {
        let path = format!(
            "/analysis/attribute-exploration/{}/refute",
            encode(session_id)
        );
        self.http.post(&path, &request, options).await
    }

    pub async fn get_exploration_status(
        &self,
        session_id: &str,
        options: Option<&RequestOptions>,
    ) -> Result<ExplorationStatusResponse, Error> {
        let path = format!(
            "/analysis/attribute-exploration/{}/status",
            encode(session_id)
        );
        self.http.get(&path, None, options).await
    }

    pub async fn complete_exploration(
        &self,
        session_id: &str,
        options: Option<&RequestOptions>,
    ) -> Result<ExplorationCompleteResponse, Error> {
        let path = format!(
            "/analysis/attribute-exploration/{}/complete",
            encode(session_id)
        );
        self.http.post(&path, &serde_json::json!({}), options).await
    }
}

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