backend more complete

main
nick 2024-07-26 20:46:48 -04:00
parent a11642e0e8
commit 70ea44ba27
2 changed files with 925 additions and 21 deletions

884
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,50 @@
//! based on [this blog post](https://robert.kra.hn/posts/2022-04-03_rust-web-wasm)
use axum::{response::IntoResponse, routing::get, Router}; use axum::{response::IntoResponse, routing::get, Router};
use clap::Parser; use clap::Parser;
use log::info;
use tokio::net::TcpListener; use tokio::net::TcpListener;
use tower::{ServiceBuilder, ServiceExt};
use tower_http::services::ServeDir;
use tower_http::trace::TraceLayer;
use std::env::{var, set_var};
use std::net::{IpAddr, Ipv6Addr, SocketAddr}; use std::net::{IpAddr, Ipv6Addr, SocketAddr};
use std::str::FromStr; use std::str::FromStr;
// Setup the command line interface with clap. /// Server for wasm application
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
#[clap(name = "server", about = "A server for our wasm project!")]
struct Opt { struct Opt {
/// set the listen addr /// Set log level
#[clap(short = 'a', long = "addr", default_value = "::1")] #[arg(
short, long,
default_value = "debug",
)]
log_level: String,
/// Set the dir for static files
#[arg(
short, long,
default_value = "./dist",
)]
static_dir: String,
/// Address to listen on
#[arg(
short, long,
default_value = "::1"
)]
addr: String, addr: String,
/// set the listen port /// Port to listen on
#[clap(short = 'p', long = "port", default_value = "8080")] #[arg(
short, long,
default_value = "8080"
)]
port: u16, port: u16,
} }
@ -24,7 +52,25 @@ struct Opt {
async fn main() { async fn main() {
let opt = Opt::parse(); let opt = Opt::parse();
let app = Router::new().route("/", get(hello)); // set RUST_LOG if not set
if var("RUST_LOG").is_err() {
let log_level = format!("{},hyper=info,mio=info", opt.log_level);
set_var("RUST_LOG", log_level);
}
tracing_subscriber::fmt::init();
let fallback = |req| async move {
match ServeDir::new(opt.static_dir).oneshot(req).await {
Ok(res) => res.map(Box::new),
Err(err) => match err {},
}
};
let app = Router::new()
.route("/api/hello", get(hello))
.fallback_service(get(fallback))
.layer(ServiceBuilder::new().layer(TraceLayer::new_for_http()));
let sock_addr = SocketAddr::from(( let sock_addr = SocketAddr::from((
IpAddr::from_str(opt.addr.as_str()).unwrap_or(IpAddr::V6(Ipv6Addr::LOCALHOST)), IpAddr::from_str(opt.addr.as_str()).unwrap_or(IpAddr::V6(Ipv6Addr::LOCALHOST)),
@ -34,7 +80,7 @@ async fn main() {
.await .await
.expect("failed to bind to port"); .expect("failed to bind to port");
println!("listening on http://{sock_addr}"); info!("listening on http://{sock_addr}");
axum::serve(tcp, app) axum::serve(tcp, app)
.await .await