rust-viewflow 0.1.0

Rust workflow library inspired by Viewflow, compatible with Axum and Actix-web
Documentation
use std::sync::Arc;

use axum::{routing::get, Router};
use rust_viewflow::{
    api::axum::create_router, migrate_sqlite, DefaultWorkflowApi, DefaultWorkflowEngine,
    LeaveRequestWorkflow, SqliteDatabase,
};
use sqlx::SqlitePool;
use tokio::net::TcpListener;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    let pool = SqlitePool::connect("sqlite::memory:").await?;
    migrate_sqlite(&pool).await?;

    let db = Arc::new(SqliteDatabase::new(pool.clone()));

    let engine = Arc::new(DefaultWorkflowEngine::new(db.clone()));

    let leave_workflow = Arc::new(LeaveRequestWorkflow::new(db));
    engine.register_workflow(leave_workflow);

    let api = DefaultWorkflowApi::new(engine);

    let app = Router::new()
        .route("/", get(|| async { "Rust Viewflow Leave Request Example" }))
        .merge(create_router(Arc::new(api)));

    println!("Server starting on http://localhost:3000");
    let listener = TcpListener::bind("0.0.0.0:3000").await?;
    axum::serve(listener, app.into_make_service()).await?;

    Ok(())
}