backend more complete
parent
a11642e0e8
commit
70ea44ba27
File diff suppressed because it is too large
Load Diff
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue