reasoninglayer 0.1.2

Rust client SDK for the Reasoning Layer API
Documentation
//! Data source operations.

use crate::error::Error;
use crate::http::HttpClient;
use crate::types::common::RequestOptions;
use crate::types::sources::{
    DiscoverSchemaRequest, DiscoverSchemaResponse, IngestFromSourceRequest,
    IngestFromSourceResponse, ListSourcesResponse, RegisterSourceRequest, RegisterSourceResponse,
    SourceDetailResponse,
};

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

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

    pub async fn register(
        &self,
        request: RegisterSourceRequest,
        options: Option<&RequestOptions>,
    ) -> Result<RegisterSourceResponse, Error> {
        self.http.post("/sources", &request, options).await
    }

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

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

    pub async fn delete(
        &self,
        source_id: &str,
        options: Option<&RequestOptions>,
    ) -> Result<(), Error> {
        let path = format!("/sources/{}", encode(source_id));
        let _: serde_json::Value = self.http.delete(&path, None, options).await?;
        Ok(())
    }

    pub async fn discover_schema(
        &self,
        source_id: &str,
        request: DiscoverSchemaRequest,
        options: Option<&RequestOptions>,
    ) -> Result<DiscoverSchemaResponse, Error> {
        let path = format!("/sources/{}/discover", encode(source_id));
        self.http.post(&path, &request, options).await
    }

    pub async fn ingest(
        &self,
        source_id: &str,
        request: IngestFromSourceRequest,
        options: Option<&RequestOptions>,
    ) -> Result<IngestFromSourceResponse, Error> {
        let path = format!("/sources/{}/ingest", encode(source_id));
        self.http.post(&path, &request, options).await
    }
}

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