patissiere/src/main.rs

40 lines
1.0 KiB
Rust

mod handlers;
use crate::handlers::AppState;
use axum::{
Router,
routing::{get, post},
extract::DefaultBodyLimit,
};
use clap::Parser;
use std::{path::PathBuf, sync::Arc};
use tokio::fs;
#[derive(Parser)]
struct Args {
#[arg(short, long, default_value_t = 3000)]
port: u16,
}
#[tokio::main]
async fn main() {
let args = Args::parse();
let paste_dir = PathBuf::from("pastes");
fs::create_dir_all(&paste_dir).await.unwrap();
let state = AppState {
paste_dir: Arc::new(paste_dir),
};
let app = Router::new()
.route("/", get(handlers::index))
.route("/", post(handlers::create_paste))
.route("/{id}", get(handlers::get_paste))
.route("/{id}/raw", get(handlers::get_paste_raw))
.layer(DefaultBodyLimit::max(1024 * 512))
.with_state(state);
let addr = format!("0.0.0.0:{}", args.port);
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
println!("patissiere listening on port {}", args.port);
axum::serve(listener, app).await.unwrap();
}