tauri-plugin-rusqlite 0.4.4

Tauri Plugin based on Rusqlite
Documentation
use crate::{
    error::Error,
    types::{Result, SQLParameter},
};
use rusqlite::{types::Value as SqliteValue, Statement};
use serde_json::Value as JsonValue;
use std::collections::HashMap;

pub fn calculate_hash(text: &String) -> String {
    let digest = md5::compute(text.as_bytes());
    format!("{:x}", digest)
}

pub fn create_parameters(parameters: &HashMap<String, JsonValue>) -> Result<Vec<SQLParameter>> {
    let mut params = Vec::<SQLParameter>::new();
    for (name, value) in parameters {
        if value.is_null() {
            params.push((name.to_string(), Box::new(SqliteValue::Null)));
        } else if value.is_i64() {
            params.push((
                name.clone(),
                Box::new(SqliteValue::Integer(value.as_i64().unwrap())),
            ));
        } else if value.is_f64() {
            params.push((
                name.clone(),
                Box::new(SqliteValue::Real(value.as_f64().unwrap())),
            ));
        } else if value.is_string() {
            params.push((
                name.clone(),
                Box::new(SqliteValue::Text(value.as_str().unwrap().to_owned())),
            ));
        } else if value.is_array() {
            params.push((
                name.clone(),
                Box::new(SqliteValue::Blob(
                    value
                        .as_array()
                        .unwrap()
                        .iter()
                        .map(|element| element.as_i64().unwrap() as u8)
                        .collect::<Vec<u8>>(),
                )),
            ));
        } else {
            return Err(Error::Database(format!("({}: {})", name, value)));
        }
    }
    Ok(params)
}

pub fn get_column_names(statement: &Statement<'_>) -> Vec<String> {
    let mut column_names = Vec::<String>::new();
    for name in statement.column_names() {
        column_names.push(name.to_string());
    }
    column_names
}