pub mod db; pub mod error; pub mod hasher; pub mod server; pub mod rebalance; pub mod rebuild; use std::sync::Arc; pub struct Args { pub db_path: String, pub volumes: Vec, pub replicas: usize, } pub fn build_app(args: &Args) -> axum::Router { if let Some(parent) = std::path::Path::new(&args.db_path).parent() { std::fs::create_dir_all(parent).unwrap_or_else(|e| { eprintln!("Failed to create database directory: {e}"); std::process::exit(1); }); } let state = server::AppState { db: db::Db::new(&args.db_path), volumes: Arc::new(args.volumes.clone()), replicas: args.replicas, http: reqwest::Client::new(), }; axum::Router::new() .route("/", axum::routing::get(server::list_keys)) .route( "/{*key}", axum::routing::get(server::get_key) .put(server::put_key) .delete(server::delete_key) .head(server::head_key), ) .with_state(state) }