qorzen_oxide/platform/
database.rs1use crate::error::Result;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6use std::sync::Arc;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct QueryResult {
11 pub rows_affected: u64,
12 pub last_insert_id: Option<i64>,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct Row {
18 pub columns: HashMap<String, serde_json::Value>,
19}
20
21pub struct Transaction {
23 }
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct Migration {
29 pub version: u32,
30 pub description: String,
31 pub up_sql: String,
32 pub down_sql: String,
33}
34
35#[cfg(not(target_arch = "wasm32"))]
36pub type DynDatabase = dyn DatabaseProvider + Send + Sync;
37
38#[cfg(target_arch = "wasm32")]
39pub type DynDatabase = dyn DatabaseProvider + Sync;
40
41pub type DatabaseArc = Arc<DynDatabase>;
42
43#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
45#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
46pub trait DatabaseProvider: DatabaseBounds + std::fmt::Debug {
47 async fn execute(&self, query: &str, params: &[serde_json::Value]) -> Result<QueryResult>;
48 async fn query(&self, query: &str, params: &[serde_json::Value]) -> Result<Vec<Row>>;
49 async fn migrate(&self, migrations: &[Migration]) -> Result<()>;
50}
51
52#[cfg(not(target_arch = "wasm32"))]
53pub trait DatabaseBounds: Send + Sync + std::fmt::Debug {}
54
55#[cfg(target_arch = "wasm32")]
56pub trait DatabaseBounds: Sync {}