Skip to main content

aro_fletch/
lib.rs

1//! Fletch persistence adapter for the Aro web framework.
2//!
3//! This crate implements the persistence ports defined in `aro-core`
4//! using fletch (SQLx-based) as the underlying database layer.
5//!
6//! Commonly needed fletch types are re-exported so downstream crates
7//! do not need `fletch` as a direct dependency for basic use.
8//!
9//! # Multi-database support
10//!
11//! Enable a database backend via Cargo features (`sqlite`, `postgres`, `mysql`).
12//! Types are generic over [`sqlx::Database`]; pass the backend type to
13//! [`AppDatabaseExt::database`] and construct [`FletchRepository`] from a
14//! matching [`fletch_orm::Pool`].
15//!
16//! # Transaction-scoped repositories
17//!
18//! Use [`FletchTransactionManager::transaction`] with a
19//! [`FletchTransactionContext`] to obtain [`FletchTransactionalRepository`]
20//! instances whose writes participate in the open transaction.
21
22pub mod database;
23pub mod error;
24mod health;
25#[cfg(feature = "query-adapters")]
26pub mod query;
27pub mod repo;
28pub mod transaction;
29
30pub use database::AppDatabaseExt;
31#[cfg(feature = "query-adapters")]
32pub use query::EntityQuery;
33pub use repo::{FletchDatabase, FletchEntity, FletchRepository, FletchTransactionalRepository};
34pub use transaction::{FletchTransactionContext, FletchTransactionManager};
35
36// Re-export query/pagination ports from aro-core.
37pub use aro_core::pagination::{Page, PageRequest};
38pub use aro_core::repository::Repository;
39#[cfg(feature = "query-adapters")]
40pub use aro_core::repository::{Paginatable, Queryable};
41
42/// Convenience re-exports for typical fletch-backed persistence development.
43pub mod prelude {
44    pub use aro_core::entity::Entity;
45    pub use aro_core::error::RepoError;
46    pub use aro_core::pagination::{Page, PageRequest};
47    pub use aro_core::repository::Repository;
48    pub use aro_core::repository::TransactionManager;
49    #[cfg(feature = "query-adapters")]
50    pub use aro_core::repository::{Paginatable, Queryable};
51
52    pub use crate::AppDatabaseExt;
53    #[cfg(feature = "query-adapters")]
54    pub use crate::EntityQuery;
55    pub use crate::FletchRepository;
56    pub use crate::FletchTransactionContext;
57    pub use crate::FletchTransactionManager;
58    pub use crate::Pool;
59    pub use crate::PoolBuilder;
60    pub use crate::PoolConfig;
61    pub use crate::Value;
62    pub use fletch_orm::{Filter, Op, Order};
63}
64
65/// Re-export the `fletch` crate for advanced usage.
66pub use fletch_orm;
67
68// Re-export commonly needed fletch types at the crate root.
69pub use fletch_orm::Column;
70pub use fletch_orm::ColumnType;
71pub use fletch_orm::Entity;
72pub use fletch_orm::FletchError;
73pub use fletch_orm::FromRow;
74pub use fletch_orm::Pool;
75pub use fletch_orm::PoolBuilder;
76pub use fletch_orm::PoolConfig;
77pub use fletch_orm::Transaction;
78pub use fletch_orm::Value;