kittynode-web 0.26.0

Control center for world computer operators.
Documentation
use eyre::{Result, eyre};
use kittynode_core::api::{DEFAULT_WEB_PORT, validate_web_port};
use std::env;

#[tokio::main]
async fn main() -> Result<()> {
    tracing_subscriber::fmt::init();
    let port = parse_port()?;
    kittynode_web::run_with_port(port).await
}

fn parse_port() -> Result<u16> {
    let mut port = DEFAULT_WEB_PORT;
    let mut args = env::args().skip(1);

    while let Some(arg) = args.next() {
        if let Some(value) = arg.strip_prefix("--port=") {
            port = parse_port_value(value)?;
        } else if arg == "--port" {
            let value = args
                .next()
                .ok_or_else(|| eyre!("--port requires a value"))?;
            port = parse_port_value(&value)?;
        } else {
            return Err(eyre!("Unknown argument: {arg}"));
        }
    }

    Ok(port)
}

fn parse_port_value(value: &str) -> Result<u16> {
    let port: u16 = value
        .parse()
        .map_err(|_| eyre!("Invalid port value: {value}"))?;
    validate_web_port(port)
}