use axum::{
   extract::State,
   routing::get,
   Router,
};

#[derive(Clone)]
struct AppState {
   app_name: String,
}

// 重点看这里
async fn hello(State(st): State<AppState>) -> String {
   format!("Hello from {}!", st.app_name)
}

#[tokio::main]
async fn main() {
   let state = AppState {
       app_name: String::from("My Axum App"),
   };

   let app = Router::new()
       .route("/", get(hello))
       .with_state(state);

   let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
       .await
       .unwrap();

   println!("Listening on http://127.0.0.1:3000");

   axum::serve(listener, app).await.unwrap();
}

let state = rodent_act::web::AppState {
    jobs: {
        let jobs = std::sync::Arc::new(
            rodent_act::web::JobManager::new(out_dir, media_dir)
        );

        jobs.load_existing();
        jobs
    },
    log_tx,
};
jobs := web.NewJobManager(outDir, mediaDir)

// 加载上一次运行时持久化的任务
jobs.LoadExisting()

state := web.AppState{
    Jobs:  jobs,
    LogTx: logTx,
}

state := web.AppState{
    Jobs: func() *web.JobManager {
        jobs := web.NewJobManager(outDir, mediaDir)
        jobs.LoadExisting()
        return jobs
    }(),
    LogTx: logTx,
}