vyuh 0.2.3

Vyuh web framework for Axum and SQLx with handler-first APIs
Documentation
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::time::Duration;
use vyuh::{
    Data, bundles,
    tasks::{TaskOutcome, TaskState},
};

#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
struct ImportJob {
    source: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
struct ImportState {
    offset: usize,
}

#[bundles::task(name = "import_records")]
async fn import_records(state: TaskState<ImportState>, input: Data<ImportJob>) -> TaskOutcome {
    let mut state = state.0.unwrap_or(ImportState { offset: 0 });
    state.offset += 100;

    if state.offset >= 500 {
        TaskOutcome::complete(&format!("imported {}", input.source)).unwrap()
    } else {
        TaskOutcome::sleep(&state, Duration::from_secs(30)).unwrap()
    }
}

fn main() {
    let _bundle = bundles::bundle! {
        import_records,
    };
}