treedx 0.2.13

Generic Rust SDK for TreeDX.
Documentation
use std::collections::BTreeMap;
use std::sync::Arc;

use serde_json::Value;

use crate::adapters::common::{json_request, segment};
use crate::error::TreeDxResult;
use crate::transport::{Transport, TreeDxHttpMethod};

#[derive(Clone)]
pub struct FilesAdapter {
    transport: Arc<dyn Transport>,
}

impl FilesAdapter {
    pub fn new(transport: Arc<dyn Transport>) -> Self {
        Self { transport }
    }

    pub async fn tree(
        &self,
        workspace_id: &str,
        query: BTreeMap<String, String>,
    ) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Get,
            format!("/api/v1/workspaces/{}/tree", segment(workspace_id)),
            None,
            Some(query),
        )
        .await
    }

    pub async fn read(
        &self,
        workspace_id: &str,
        query: BTreeMap<String, String>,
    ) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Get,
            format!("/api/v1/workspaces/{}/files", segment(workspace_id)),
            None,
            Some(query),
        )
        .await
    }

    pub async fn write(&self, workspace_id: &str, body: Value) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Put,
            format!("/api/v1/workspaces/{}/files", segment(workspace_id)),
            Some(body),
            None,
        )
        .await
    }

    pub async fn patch(&self, workspace_id: &str, body: Value) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Patch,
            format!("/api/v1/workspaces/{}/files", segment(workspace_id)),
            Some(body),
            None,
        )
        .await
    }

    pub async fn delete(
        &self,
        workspace_id: &str,
        query: BTreeMap<String, String>,
    ) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Delete,
            format!("/api/v1/workspaces/{}/files", segment(workspace_id)),
            None,
            Some(query),
        )
        .await
    }

    pub async fn search(&self, workspace_id: &str, body: Value) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Post,
            format!("/api/v1/workspaces/{}/search", segment(workspace_id)),
            Some(body),
            None,
        )
        .await
    }

    pub async fn status(&self, workspace_id: &str) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Get,
            format!("/api/v1/workspaces/{}/status", segment(workspace_id)),
            None,
            None,
        )
        .await
    }

    pub async fn diff(
        &self,
        workspace_id: &str,
        query: BTreeMap<String, String>,
    ) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Get,
            format!("/api/v1/workspaces/{}/diff", segment(workspace_id)),
            None,
            Some(query),
        )
        .await
    }

    pub async fn commit(&self, workspace_id: &str, body: Value) -> TreeDxResult<Value> {
        json_request(
            &self.transport,
            TreeDxHttpMethod::Post,
            format!("/api/v1/workspaces/{}/commit", segment(workspace_id)),
            Some(body),
            None,
        )
        .await
    }
}