use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use uuid::Uuid;
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum SqlValue {
Null,
Bool(bool),
Integer(i64),
Float(f64),
Text(String),
Blob(Vec<u8>),
Json(Value),
Uuid(Uuid),
Timestamp(DateTime<Utc>),
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SqlStatement {
pub sql: String,
pub params: Vec<SqlValue>,
pub label: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SqlColumn {
pub name: String,
pub value: SqlValue,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SqlRow {
pub columns: Vec<SqlColumn>,
}
impl SqlRow {
pub fn get(&self, name: &str) -> Option<&SqlValue> {
self.columns
.iter()
.find(|c| c.name == name)
.map(|c| &c.value)
}
}