#[cfg(all(target_arch = "wasm32", feature = "libsql"))]
use libsql::wasm::{CloudflareSender, Connection};
#[cfg(all(not(target_arch = "wasm32"), feature = "libsql"))]
use libsql::Connection;
#[cfg(any(feature = "libsql", not(target_arch = "wasm32")))]
pub struct Database {
#[cfg(all(target_arch = "wasm32", feature = "libsql"))]
pub inner: Connection<CloudflareSender>,
#[cfg(all(not(target_arch = "wasm32"), feature = "libsql"))]
pub inner: Connection,
}
#[cfg(all(target_arch = "wasm32", not(feature = "libsql")))]
pub struct Database {
_phantom: std::marker::PhantomData<()>,
}
#[cfg(all(target_arch = "wasm32", feature = "libsql"))]
impl From<Connection<CloudflareSender>> for Database {
fn from(inner: Connection<CloudflareSender>) -> Self {
Self { inner }
}
}
#[cfg(all(not(target_arch = "wasm32"), feature = "libsql"))]
impl From<Connection> for Database {
fn from(inner: Connection) -> Self {
Self { inner }
}
}
#[cfg(feature = "libsql")]
impl Database {
#[cfg(target_arch = "wasm32")]
pub async fn new_connect(
url: &str,
token: &str,
) -> std::result::Result<Self, crate::compat::LibsqlError> {
let conn = Connection::open_cloudflare_worker(url.to_string(), token.to_string());
conn.execute("SELECT 1", ()).await.map(|_| Self::from(conn))
}
#[cfg(not(target_arch = "wasm32"))]
pub async fn new_connect(
_url: &str,
_token: &str,
) -> std::result::Result<Self, crate::compat::LibsqlError> {
panic!("Native database connections not supported in this build configuration. Use the 'libsql_default' feature for native support.")
}
pub async fn query(
&self,
sql: &str,
params: Vec<crate::compat::LibsqlValue>,
) -> Result<crate::compat::LibsqlRows, crate::compat::LibsqlError> {
self.inner.query(sql, params).await
}
pub async fn execute(
&self,
sql: &str,
params: Vec<crate::compat::LibsqlValue>,
) -> Result<u64, crate::compat::LibsqlError> {
self.inner.execute(sql, params).await
}
}
#[cfg(all(target_arch = "wasm32", not(feature = "libsql")))]
impl Database {
pub async fn new_connect(_url: &str, _token: &str) -> Result<Self, crate::error::Error> {
Ok(Database {
_phantom: std::marker::PhantomData,
})
}
pub async fn query(
&self,
_sql: &str,
_params: Vec<crate::compat::LibsqlValue>,
) -> Result<crate::compat::LibsqlRows, crate::compat::LibsqlError> {
Ok(crate::compat::LibsqlRows::new(vec![]))
}
pub async fn execute(
&self,
_sql: &str,
_params: Vec<crate::compat::LibsqlValue>,
) -> Result<u64, crate::compat::LibsqlError> {
Ok(0)
}
}