40 lines
1.0 KiB
Rust
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();
|
|
}
|