pub mod config;
pub mod connection;
pub mod error;
pub mod pool;
pub mod query;
pub mod result;
pub mod transaction;
pub use config::{ClientConfig, ConnectionConfig};
pub use connection::Connection;
pub use error::ClientError;
pub use pool::ConnectionPool;
pub use query::{Query, QueryBuilder};
pub use result::{QueryResult, Row, Value};
pub use transaction::Transaction;
pub struct AegisClient {
#[allow(dead_code)]
config: ClientConfig,
pool: ConnectionPool,
}
impl AegisClient {
pub async fn new(config: ClientConfig) -> Result<Self, ClientError> {
let pool =
ConnectionPool::with_connection_config(config.pool.clone(), config.connection.clone())
.await?;
Ok(Self { config, pool })
}
pub async fn connect(url: &str) -> Result<Self, ClientError> {
let config = ClientConfig::from_url(url)?;
Self::new(config).await
}
pub async fn query(&self, sql: &str) -> Result<QueryResult, ClientError> {
let conn = self.pool.get().await?;
conn.query(sql).await
}
pub async fn query_with_params(
&self,
sql: &str,
params: Vec<Value>,
) -> Result<QueryResult, ClientError> {
let conn = self.pool.get().await?;
conn.query_with_params(sql, params).await
}
pub async fn execute(&self, sql: &str) -> Result<u64, ClientError> {
let conn = self.pool.get().await?;
conn.execute(sql).await
}
pub async fn execute_with_params(
&self,
sql: &str,
params: Vec<Value>,
) -> Result<u64, ClientError> {
let conn = self.pool.get().await?;
conn.execute_with_params(sql, params).await
}
pub async fn begin(&self) -> Result<Transaction, ClientError> {
let conn = self.pool.get().await?;
Transaction::begin(conn).await
}
pub fn query_builder(&self) -> QueryBuilder {
QueryBuilder::new()
}
pub fn pool_stats(&self) -> pool::PoolStats {
self.pool.stats()
}
pub async fn is_connected(&self) -> bool {
self.pool.is_healthy().await
}
pub async fn close(&self) {
self.pool.close().await;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_client_config_from_url() {
let config = ClientConfig::from_url("aegis://localhost:9090/testdb")
.expect("Should parse valid URL");
assert_eq!(config.connection.host, "localhost");
assert_eq!(config.connection.port, 9090);
assert_eq!(config.connection.database, "testdb");
}
}