branch: main
lib.rs
910 bytesRaw
use axum::{routing::get, Router};
use std::sync::Arc;
use tower_service::Service;
use worker::*;

pub mod error;
pub mod resources;

use crate::resources::foos::{self, service::FooService};

/// AppState's readonly fields are all `Arc<T>` for safe sharing between threads
#[derive(Clone)]
struct AppState {
    foo_service: Arc<FooService>,
}

fn router(env: Env) -> Router {
    let kv = env.kv("EXAMPLE").unwrap();
    let foo_service = FooService::new(kv);

    let app_state = AppState {
        foo_service: Arc::new(foo_service),
    };

    Router::new()
        .route("/", get(root))
        .route("/foo", get(foos::api::get))
        .with_state(app_state)
}

#[event(fetch)]
async fn fetch(
    req: HttpRequest,
    env: Env,
    _ctx: Context,
) -> Result<axum::http::Response<axum::body::Body>> {
    Ok(router(env).call(req).await?)
}

pub async fn root() -> &'static str {
    "Hello Axum!"
}