From 98135a87f9fc0faa9bb0f049211679f6f077c1c1 Mon Sep 17 00:00:00 2001 From: Duckonaut Date: Wed, 4 Nov 2026 15:49:25 +0100 Subject: feature: remove port, add full address string --- src/main.rs | 46 +++++++++++++++++++++++----------------------- src/server.rs | 13 ++++++++----- 2 files changed, 31 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index b39f26d..88b1325 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,12 +26,12 @@ enum Args { )] change_dir: std::path::PathBuf, #[clap( - short = 'p', - long = "port", - default_value = "4310", - help = "The port to serve on" + short = 'a', + long = "address", + default_value = "127.0.0.1", + help = "The address to serve on" )] - port: u16, + address: String, #[clap( short = 'l', long = "local", @@ -77,12 +77,12 @@ enum Args { )] public_dir: std::path::PathBuf, #[clap( - short = 'p', - long = "port", - default_value = "4310", - help = "The port to serve on" + short = 'a', + long = "address", + default_value = "127.0.0.1", + help = "The address to serve on" )] - port: u16, + address: String, #[clap( short = 'l', long = "local", @@ -111,7 +111,7 @@ async fn main() -> color_eyre::Result<()> { match args { Args::Serve { change_dir, - port, + address, local, } => { if !change_dir.is_dir() { @@ -125,9 +125,9 @@ async fn main() -> color_eyre::Result<()> { println!("🌴 Project root: {}", change_dir.display().bright_yellow()); if local { - serve_locally(change_dir, false, port, None).await + serve_locally(change_dir, false, &address, None).await } else { - serve_from_temp(change_dir, false, port, None).await + serve_from_temp(change_dir, false, &address, None).await } } Args::Build { @@ -137,7 +137,7 @@ async fn main() -> color_eyre::Result<()> { Args::Dev { change_dir, public_dir, - port, + address, local, } => { if !change_dir.is_dir() { @@ -165,9 +165,9 @@ async fn main() -> color_eyre::Result<()> { let public_dir = Some(public_dir.canonicalize()?); if local { - serve_locally(change_dir, true, port, public_dir).await + serve_locally(change_dir, true, &address, public_dir).await } else { - serve_from_temp(change_dir, true, port, public_dir).await + serve_from_temp(change_dir, true, &address, public_dir).await } } Args::New { name } => create_project(&name), @@ -178,7 +178,7 @@ async fn main() -> color_eyre::Result<()> { async fn serve_locally( change_dir: PathBuf, dev_mode: bool, - port: u16, + address: &str, public_dir: Option, ) -> Result<()> { println!("🌴 Running in local mode"); @@ -187,13 +187,13 @@ async fn serve_locally( ensure_entry_point().await?; - serve(dev_mode, port, public_dir).await + serve(dev_mode, address, public_dir).await } async fn serve_from_temp( change_dir: PathBuf, dev_mode: bool, - port: u16, + address: &str, public_dir: Option, ) -> Result<()> { // Create a /tmp/reluax-XXXXXX directory for the server to pre-process files in. @@ -229,7 +229,7 @@ async fn serve_from_temp( ensure_entry_point().await?; - serve(dev_mode, port, public_dir).await + serve(dev_mode, address, public_dir).await } async fn preprocess_current_dir() -> Result<()> { @@ -258,7 +258,7 @@ async fn ensure_entry_point() -> Result<()> { Ok(()) } -async fn serve(dev_mode: bool, port: u16, public_dir: Option) -> Result<()> { +async fn serve(dev_mode: bool, address: &str, public_dir: Option) -> Result<()> { println!("📦 Building Lua state..."); let lua = luax::prepare_lua(dev_mode)?; @@ -269,8 +269,8 @@ async fn serve(dev_mode: bool, port: u16, public_dir: Option) -> Result println!("🌴 App name: {}", name.bright_yellow()); } - println!("🛫 Starting server on port {}...", port); - server::Server::serve(lua, port, public_dir).await + println!("🛫 Starting server on address {}...", address); + server::Server::serve(lua, address, public_dir).await } fn recurse_copy_lua(from: &Path, to: &Path) -> Result { diff --git a/src/server.rs b/src/server.rs index b6e8110..76be5a7 100644 --- a/src/server.rs +++ b/src/server.rs @@ -3,6 +3,7 @@ use std::io::Write; use std::net::SocketAddr; use std::path::PathBuf; use std::pin::Pin; +use std::str::FromStr; use std::sync::{Arc, Mutex}; use http_body_util::{BodyExt, Collected, Full}; @@ -19,7 +20,7 @@ use color_eyre::Result; use mlua::Lua; pub struct Server { - port: u16, + addr: SocketAddr, state: State, } @@ -30,18 +31,20 @@ struct State { } impl Server { - pub async fn serve(lua: Lua, port: u16, public_dir: Option) -> Result<()> { + pub async fn serve(lua: Lua, address: &str, public_dir: Option) -> Result<()> { let state = State { lua: Arc::new(Mutex::new(lua)), public_dir, }; - let server = Self { port, state }; + + let addr: SocketAddr = SocketAddr::from_str(address)?; + + let server = Self { addr, state }; server.start().await } async fn start(self) -> Result<()> { - let addr = SocketAddr::from(([127, 0, 0, 1], self.port)); - let listener = TcpListener::bind(addr).await?; + let listener = TcpListener::bind(self.addr).await?; let state = self.state; -- cgit v1.3.1