rustbase-rs 0.1.0

A Rust Rustbase driver
Documentation
use client::Response;
use tokio::net::ToSocketAddrs;

mod client;
pub mod error;

pub struct Query;

impl Query {
    pub fn insert(key: &str, value: serde_json::Value) -> String {
        format!(
            "insert {} in {}",
            serde_json::to_string(&value).unwrap(),
            key
        )
    }

    pub fn get(key: &str) -> String {
        format!("get {}", key)
    }

    pub fn delete(key: &str) -> String {
        format!("delete {}", key)
    }

    pub fn update(key: &str, value: serde_json::Value) -> String {
        format!(
            "update {} in {}",
            serde_json::to_string(&value).unwrap(),
            key
        )
    }
}

#[derive(Debug)]
pub struct Rustbase {
    client: client::Client,
    database: String,
}

impl Rustbase {
    pub async fn connect(
        addr: impl ToSocketAddrs,
        database: String,
    ) -> Result<Self, std::io::Error> {
        let client = client::Client::connect(addr).await?;
        Ok(Self { client, database })
    }

    pub fn set_database(&mut self, database: String) {
        self.database = database;
    }

    fn parse_response(response: Response) -> error::Result<Response> {
        match response.status {
            client::Status::Ok => Ok(response),

            _ => Err(error::Error {
                message: response.message,
                status: response.status,
            }),
        }
    }

    pub async fn insert(&mut self, key: &str, value: serde_json::Value) -> error::Result<Response> {
        let query = Query::insert(key, value);

        let response = self
            .client
            .request(query, self.database.clone(), None)
            .await
            .unwrap();

        Self::parse_response(response)
    }

    pub async fn get(&mut self, key: &str) -> error::Result<Response> {
        let query = Query::get(key);

        let response = self
            .client
            .request(query, self.database.clone(), None)
            .await
            .unwrap();

        Self::parse_response(response)
    }

    pub async fn delete(&mut self, key: &str) -> error::Result<Response> {
        let query = Query::delete(key);

        let response = self
            .client
            .request(query, self.database.clone(), None)
            .await
            .unwrap();

        Self::parse_response(response)
    }

    pub async fn update(&mut self, key: &str, value: serde_json::Value) -> error::Result<Response> {
        let query = Query::update(key, value);

        let response = self
            .client
            .request(query, self.database.clone(), None)
            .await
            .unwrap();

        Self::parse_response(response)
    }
}