41 lines
1.1 KiB
Rust
41 lines
1.1 KiB
Rust
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<String>,
|
|
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)
|
|
}
|