klave 0.5.0

A Rust SDK for the Klave platform.
Documentation
use crate::sdk;

pub struct Connection {
    handle: String,
}

impl Connection {
    pub fn connection_string(host: &str, dbname: &str, user: &str, password: &str) -> String {
        format!("host={host} dbname={dbname} user={user} password={password}")
    }

    pub fn open(uri: &str) -> Result<Self, Box<dyn std::error::Error>> {
        let handle = sdk::connection_open(uri)?;
        Ok(Connection { handle })
    }

    fn normalise_sql(input: &str) -> Result<String, Box<dyn std::error::Error>> {
        let normalized = input.split_whitespace().collect::<Vec<_>>().join(" ");

        if normalized.is_empty() {
            return Err("SQL input cannot be empty".into());
        }

        Ok(normalized)
    }

    pub fn query(&self, query: &str) -> Result<String, Box<dyn std::error::Error>> {
        let query = Self::normalise_sql(query)?;
        sdk::sql_query(&self.handle, &query).map_err(Into::into)
    }

    pub fn execute(&self, command: &str) -> Result<String, Box<dyn std::error::Error>> {
        let command = Self::normalise_sql(command)?;
        sdk::sql_exec(&self.handle, &command).map_err(Into::into)
    }
}