Skip to main content

durable/
lib.rs

1pub mod ctx;
2pub mod error;
3pub mod executor;
4
5pub use ctx::Ctx;
6pub use ctx::RetryPolicy;
7pub use ctx::{TaskQuery, TaskSort, TaskSummary};
8pub use durable_db::entity::task::TaskStatus;
9pub use durable_macros::{step, workflow};
10pub use error::DurableError;
11pub use executor::{Executor, HeartbeatConfig, RecoveredTask};
12pub use sea_orm::DatabaseTransaction;
13
14use sea_orm::{ConnectOptions, Database, DatabaseConnection};
15use sea_orm_migration::MigratorTrait;
16
17/// Initialize durable: connect to Postgres and run migrations.
18///
19/// Sets `search_path = public, durable` on every pooled connection so
20/// Postgres resolves the `task_status` enum type without a schema prefix.
21///
22/// ```ignore
23/// let db = durable::init("postgres://localhost/mydb").await?;
24/// ```
25pub async fn init(database_url: &str) -> Result<DatabaseConnection, DurableError> {
26    let mut opt = ConnectOptions::new(database_url);
27    // Apply search_path at the pool level so every connection resolves
28    // the `task_status` enum in the `durable` schema.
29    opt.set_schema_search_path("public, durable");
30    let db = Database::connect(opt).await?;
31
32    // Run migrations
33    durable_db::Migrator::up(&db, None).await?;
34
35    tracing::info!("durable initialized");
36    Ok(db)
37}