parametrize port, address and store path

This commit is contained in:
JOLIMAITRE Matthieu 2024-08-04 17:53:25 +02:00
parent 5a021f9781
commit a07c61fdbf
2 changed files with 30 additions and 9 deletions

View file

@ -1,5 +1,6 @@
use std::{
fmt::Write,
path::PathBuf,
sync::{Arc, RwLock},
};
@ -22,6 +23,22 @@ use validator::{Validate, ValidationError};
mod common;
mod store;
#[derive(Debug, clap::Parser)]
/// Arbre
struct Cmd {
#[arg(short, long, default_value_t = 8200)]
/// Port on which th server will listen.
port: u16,
#[arg(short, long, default_value = "0.0.0.0")]
/// Hostname or address on which th server will listen.
address: String,
#[arg(short, long, default_value = "./store")]
/// Path to the directory to use as storage for topics.
store: PathBuf,
}
#[derive(Debug, Clone)]
struct MainState {
store: Arc<RwLock<Store>>,
@ -29,7 +46,13 @@ struct MainState {
#[tokio::main]
async fn main() -> Result<()> {
let store = Store::open("./store")?;
let Cmd {
address,
port,
store,
} = clap::Parser::parse();
let store = Store::open(store)?;
let store = Arc::new(RwLock::new(store));
let state = MainState { store };
@ -42,7 +65,7 @@ async fn main() -> Result<()> {
.route("/", get(home))
.with_state(state);
let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();
let listener = TcpListener::bind((address, port)).await.unwrap();
let server = axum::serve(listener, app);
server.await?;