46 lines
1.1 KiB
Rust
46 lines
1.1 KiB
Rust
|
use axum::{response::IntoResponse, routing::get, Router};
|
||
|
|
||
|
use clap::Parser;
|
||
|
|
||
|
use tokio::net::TcpListener;
|
||
|
|
||
|
use std::net::{IpAddr, Ipv6Addr, SocketAddr};
|
||
|
use std::str::FromStr;
|
||
|
|
||
|
// Setup the command line interface with clap.
|
||
|
#[derive(Parser, Debug)]
|
||
|
#[clap(name = "server", about = "A server for our wasm project!")]
|
||
|
struct Opt {
|
||
|
/// set the listen addr
|
||
|
#[clap(short = 'a', long = "addr", default_value = "::1")]
|
||
|
addr: String,
|
||
|
|
||
|
/// set the listen port
|
||
|
#[clap(short = 'p', long = "port", default_value = "8080")]
|
||
|
port: u16,
|
||
|
}
|
||
|
|
||
|
#[tokio::main]
|
||
|
async fn main() {
|
||
|
let opt = Opt::parse();
|
||
|
|
||
|
let app = Router::new().route("/", get(hello));
|
||
|
|
||
|
let sock_addr = SocketAddr::from((
|
||
|
IpAddr::from_str(opt.addr.as_str()).unwrap_or(IpAddr::V6(Ipv6Addr::LOCALHOST)),
|
||
|
opt.port,
|
||
|
));
|
||
|
let tcp = TcpListener::bind(sock_addr)
|
||
|
.await
|
||
|
.expect("failed to bind to port");
|
||
|
|
||
|
println!("listening on http://{sock_addr}");
|
||
|
|
||
|
axum::serve(tcp, app)
|
||
|
.await
|
||
|
.expect("Unable to start server");
|
||
|
}
|
||
|
|
||
|
async fn hello() -> impl IntoResponse {
|
||
|
"penalty for not contacting the server correctly"
|
||
|
}
|