diff --git a/crates/settings/src/cli.rs b/crates/settings/src/cli.rs index ce7e2007..036a0de3 100644 --- a/crates/settings/src/cli.rs +++ b/crates/settings/src/cli.rs @@ -1,26 +1,30 @@ -use clap::Parser; +use std::net; use url::URL; use crate::Settings; -#[derive(Parser, Debug)] -#[command(name = "Stormlicht")] -#[command(version, about, long_about = None)] +#[derive(clap::Parser, Debug)] +#[command(name = "Stormlicht", version, about="A modern browser engine", long_about = None)] pub struct Arguments { /// Disable javascript execution - #[arg(long)] - disable_javascript: Option, + #[clap( + long, + action = clap::ArgAction::SetTrue, + )] + disable_javascript: bool, /// URL to load initially - #[arg(value_parser = parse_url)] + #[arg(value_parser = parse_url, value_hint = clap::ValueHint::Url)] url: Option, + + /// Proxy for http requests + #[arg(long, value_parser = parse_socketaddr)] + proxy: Option, } impl Arguments { pub(crate) fn update_settings(self, settings: &mut Settings) { - if let Some(disable_javascript) = self.disable_javascript { - settings.disable_javascript = disable_javascript - } + settings.disable_javascript = settings.disable_javascript; if let Some(url) = self.url { settings.url = url; @@ -31,3 +35,8 @@ impl Arguments { fn parse_url(s: &str) -> Result { s.parse().map_err(|e: url::Error| format!("{e:?}")) } + +fn parse_socketaddr(s: &str) -> Result { + s.parse() + .map_err(|e: ::Err| format!("{e}")) +} diff --git a/crates/settings/src/lib.rs b/crates/settings/src/lib.rs index 2809f134..eb5dfed2 100644 --- a/crates/settings/src/lib.rs +++ b/crates/settings/src/lib.rs @@ -2,7 +2,7 @@ mod cli; -use std::sync::LazyLock; +use std::{net, sync::LazyLock}; use clap::Parser; use url::URL; @@ -23,6 +23,9 @@ pub struct Settings { /// URL to load initially pub url: URL, + + /// Proxy for networking + pub proxy: Option, } impl Settings { @@ -31,6 +34,7 @@ impl Settings { let mut settings = Self::default(); let args = cli::Arguments::parse(); + args.update_settings(&mut settings); settings @@ -42,6 +46,7 @@ impl Default for Settings { Self { disable_javascript: false, url: WELCOME_PAGE.parse().expect("welcome page is a valid url"), + proxy: None, } } }