diff --git a/apps/gpauth/src/auth_window.rs b/apps/gpauth/src/auth_window.rs index ed81026..11c4230 100644 --- a/apps/gpauth/src/auth_window.rs +++ b/apps/gpauth/src/auth_window.rs @@ -19,8 +19,8 @@ use tokio_util::sync::CancellationToken; use webkit2gtk::{ gio::Cancellable, glib::{GString, TimeSpan}, - LoadEvent, SettingsExt, TLSErrorsPolicy, URIResponse, URIResponseExt, WebContextExt, WebResource, - WebResourceExt, WebView, WebViewExt, WebsiteDataManagerExtManual, WebsiteDataTypes, + LoadEvent, SettingsExt, TLSErrorsPolicy, URIResponse, URIResponseExt, WebContextExt, WebResource, WebResourceExt, + WebView, WebViewExt, WebsiteDataManagerExtManual, WebsiteDataTypes, }; enum AuthDataError { @@ -216,9 +216,7 @@ impl<'a> AuthWindow<'a> { if let Some(auth_result) = auth_result_rx.recv().await { match auth_result { Ok(auth_data) => return Ok(auth_data), - Err(AuthDataError::TlsError) => { - return Err(anyhow::anyhow!("TLS error: certificate verify failed")) - } + Err(AuthDataError::TlsError) => bail!("TLS error: certificate verify failed"), Err(AuthDataError::NotFound) => { info!("No auth data found, it may not be the /SAML20/SP/ACS endpoint"); @@ -227,10 +225,7 @@ impl<'a> AuthWindow<'a> { let window = Arc::clone(window); let cancel_token = CancellationToken::new(); - raise_window_cancel_token - .write() - .await - .replace(cancel_token.clone()); + raise_window_cancel_token.write().await.replace(cancel_token.clone()); tokio::spawn(async move { let delay_secs = 1; diff --git a/apps/gpauth/src/cli.rs b/apps/gpauth/src/cli.rs index 5bb7c99..45729c8 100644 --- a/apps/gpauth/src/cli.rs +++ b/apps/gpauth/src/cli.rs @@ -13,12 +13,7 @@ use tempfile::NamedTempFile; use crate::auth_window::{portal_prelogin, AuthWindow}; -const VERSION: &str = concat!( - env!("CARGO_PKG_VERSION"), - " (", - compile_time::date_str!(), - ")" -); +const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), " (", compile_time::date_str!(), ")"); #[derive(Parser, Clone)] #[command(version = VERSION)] diff --git a/apps/gpclient/src/cli.rs b/apps/gpclient/src/cli.rs index 35228d9..dcad0b8 100644 --- a/apps/gpclient/src/cli.rs +++ b/apps/gpclient/src/cli.rs @@ -9,12 +9,7 @@ use crate::{ launch_gui::{LaunchGuiArgs, LaunchGuiHandler}, }; -const VERSION: &str = concat!( - env!("CARGO_PKG_VERSION"), - " (", - compile_time::date_str!(), - ")" -); +const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), " (", compile_time::date_str!(), ")"); pub(crate) struct SharedArgs { pub(crate) fix_openssl: bool, @@ -53,10 +48,7 @@ struct Cli { #[command(subcommand)] command: CliCommand, - #[arg( - long, - help = "Get around the OpenSSL `unsafe legacy renegotiation` error" - )] + #[arg(long, help = "Get around the OpenSSL `unsafe legacy renegotiation` error")] fix_openssl: bool, #[arg(long, help = "Ignore the TLS errors")] ignore_tls_errors: bool, diff --git a/apps/gpclient/src/connect.rs b/apps/gpclient/src/connect.rs index c973480..126f8cc 100644 --- a/apps/gpclient/src/connect.rs +++ b/apps/gpclient/src/connect.rs @@ -21,17 +21,9 @@ use crate::{cli::SharedArgs, GP_CLIENT_LOCK_FILE}; pub(crate) struct ConnectArgs { #[arg(help = "The portal server to connect to")] server: String, - #[arg( - short, - long, - help = "The gateway to connect to, it will prompt if not specified" - )] + #[arg(short, long, help = "The gateway to connect to, it will prompt if not specified")] gateway: Option, - #[arg( - short, - long, - help = "The username to use, it will prompt if not specified" - )] + #[arg(short, long, help = "The username to use, it will prompt if not specified")] user: Option, #[arg(long, short, help = "The VPNC script to use")] script: Option, @@ -174,11 +166,7 @@ impl<'a> ConnectHandler<'a> { Ok(()) } - async fn obtain_credential( - &self, - prelogin: &Prelogin, - server: &str, - ) -> anyhow::Result { + async fn obtain_credential(&self, prelogin: &Prelogin, server: &str) -> anyhow::Result { let is_gateway = prelogin.is_gateway(); match prelogin { diff --git a/apps/gpservice/src/cli.rs b/apps/gpservice/src/cli.rs index 9c0435e..1141e91 100644 --- a/apps/gpservice/src/cli.rs +++ b/apps/gpservice/src/cli.rs @@ -6,9 +6,7 @@ use clap::Parser; use gpapi::{ process::gui_launcher::GuiLauncher, service::{request::WsRequest, vpn_state::VpnState}, - utils::{ - crypto::generate_key, env_file, lock_file::LockFile, redact::Redaction, shutdown_signal, - }, + utils::{crypto::generate_key, env_file, lock_file::LockFile, redact::Redaction, shutdown_signal}, GP_SERVICE_LOCK_FILE, }; use log::{info, warn, LevelFilter}; @@ -16,12 +14,7 @@ use tokio::sync::{mpsc, watch}; use crate::{vpn_task::VpnTask, ws_server::WsServer}; -const VERSION: &str = concat!( - env!("CARGO_PKG_VERSION"), - " (", - compile_time::date_str!(), - ")" -); +const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), " (", compile_time::date_str!(), ")"); #[derive(Parser)] #[command(version = VERSION)] @@ -51,13 +44,7 @@ impl Cli { let (vpn_state_tx, vpn_state_rx) = watch::channel(VpnState::Disconnected); let mut vpn_task = VpnTask::new(ws_req_rx, vpn_state_tx); - let ws_server = WsServer::new( - api_key.clone(), - ws_req_tx, - vpn_state_rx, - lock_file.clone(), - redaction, - ); + let ws_server = WsServer::new(api_key.clone(), ws_req_tx, vpn_state_rx, lock_file.clone(), redaction); let (shutdown_tx, mut shutdown_rx) = mpsc::channel::<()>(4); let shutdown_tx_clone = shutdown_tx.clone(); @@ -76,11 +63,7 @@ impl Cli { if no_gui { info!("GUI is disabled"); } else { - let envs = self - .env_file - .as_ref() - .map(env_file::load_env_vars) - .transpose()?; + let envs = self.env_file.as_ref().map(env_file::load_env_vars).transpose()?; let minimized = self.minimized; diff --git a/apps/gpservice/src/handlers.rs b/apps/gpservice/src/handlers.rs index 3e2c6c9..1afdb6d 100644 --- a/apps/gpservice/src/handlers.rs +++ b/apps/gpservice/src/handlers.rs @@ -21,17 +21,11 @@ pub(crate) async fn active_gui(State(ctx): State>) -> impl ctx.send_event(WsEvent::ActiveGui).await; } -pub(crate) async fn auth_data( - State(ctx): State>, - body: String, -) -> impl IntoResponse { +pub(crate) async fn auth_data(State(ctx): State>, body: String) -> impl IntoResponse { ctx.send_event(WsEvent::AuthData(body)).await; } -pub(crate) async fn ws_handler( - ws: WebSocketUpgrade, - State(ctx): State>, -) -> impl IntoResponse { +pub(crate) async fn ws_handler(ws: WebSocketUpgrade, State(ctx): State>) -> impl IntoResponse { ws.on_upgrade(move |socket| handle_socket(socket, ctx)) } diff --git a/apps/gpservice/src/ws_server.rs b/apps/gpservice/src/ws_server.rs index 8f09542..aa274b9 100644 --- a/apps/gpservice/src/ws_server.rs +++ b/apps/gpservice/src/ws_server.rs @@ -98,12 +98,7 @@ impl WsServer { lock_file: Arc, redaction: Arc, ) -> Self { - let ctx = Arc::new(WsServerContext::new( - api_key, - ws_req_tx, - vpn_state_rx, - redaction, - )); + let ctx = Arc::new(WsServerContext::new(api_key, ws_req_tx, vpn_state_rx, redaction)); let cancel_token = CancellationToken::new(); Self { diff --git a/crates/gpapi/src/auth.rs b/crates/gpapi/src/auth.rs index a3dd665..2e3fb2a 100644 --- a/crates/gpapi/src/auth.rs +++ b/crates/gpapi/src/auth.rs @@ -27,11 +27,7 @@ impl SamlAuthResult { } impl SamlAuthData { - pub fn new( - username: String, - prelogin_cookie: Option, - portal_userauthcookie: Option, - ) -> Self { + pub fn new(username: String, prelogin_cookie: Option, portal_userauthcookie: Option) -> Self { Self { username, prelogin_cookie, @@ -78,13 +74,9 @@ impl SamlAuthData { prelogin_cookie: &Option, portal_userauthcookie: &Option, ) -> bool { - let username_valid = username - .as_ref() - .is_some_and(|username| !username.is_empty()); + let username_valid = username.as_ref().is_some_and(|username| !username.is_empty()); let prelogin_cookie_valid = prelogin_cookie.as_ref().is_some_and(|val| val.len() > 5); - let portal_userauthcookie_valid = portal_userauthcookie - .as_ref() - .is_some_and(|val| val.len() > 5); + let portal_userauthcookie_valid = portal_userauthcookie.as_ref().is_some_and(|val| val.len() > 5); username_valid && (prelogin_cookie_valid || portal_userauthcookie_valid) } diff --git a/crates/gpapi/src/credential.rs b/crates/gpapi/src/credential.rs index 2aba774..e1a1be5 100644 --- a/crates/gpapi/src/credential.rs +++ b/crates/gpapi/src/credential.rs @@ -112,11 +112,7 @@ pub struct CachedCredential { } impl CachedCredential { - pub fn new( - username: String, - password: Option, - auth_cookie: AuthCookieCredential, - ) -> Self { + pub fn new(username: String, password: Option, auth_cookie: AuthCookieCredential) -> Self { Self { username, password, @@ -193,8 +189,7 @@ impl Credential { let mut params = HashMap::new(); params.insert("user", self.username()); - let (passwd, prelogin_cookie, portal_userauthcookie, portal_prelogonuserauthcookie) = match self - { + let (passwd, prelogin_cookie, portal_userauthcookie, portal_prelogonuserauthcookie) = match self { Credential::Password(cred) => (Some(cred.password()), None, None, None), Credential::PreloginCookie(cred) => (None, Some(cred.prelogin_cookie()), None, None), Credential::AuthCookie(cred) => ( @@ -213,10 +208,7 @@ impl Credential { params.insert("passwd", passwd.unwrap_or_default()); params.insert("prelogin-cookie", prelogin_cookie.unwrap_or_default()); - params.insert( - "portal-userauthcookie", - portal_userauthcookie.unwrap_or_default(), - ); + params.insert("portal-userauthcookie", portal_userauthcookie.unwrap_or_default()); params.insert( "portal-prelogonuserauthcookie", portal_prelogonuserauthcookie.unwrap_or_default(), diff --git a/crates/gpapi/src/gateway/login.rs b/crates/gpapi/src/gateway/login.rs index e3aa2f2..5ba83b7 100644 --- a/crates/gpapi/src/gateway/login.rs +++ b/crates/gpapi/src/gateway/login.rs @@ -10,11 +10,7 @@ use crate::{ utils::{normalize_server, remove_url_scheme}, }; -pub async fn gateway_login( - gateway: &str, - cred: &Credential, - gp_params: &GpParams, -) -> anyhow::Result { +pub async fn gateway_login(gateway: &str, cred: &Credential, gp_params: &GpParams) -> anyhow::Result { let url = normalize_server(gateway)?; let gateway = remove_url_scheme(&url); @@ -70,11 +66,7 @@ fn build_gateway_token(doc: &Document, computer: &str) -> anyhow::Result Ok(token) } -fn read_args<'a>( - args: &'a [String], - index: usize, - key: &'a str, -) -> anyhow::Result<(&'a str, &'a str)> { +fn read_args<'a>(args: &'a [String], index: usize, key: &'a str) -> anyhow::Result<(&'a str, &'a str)> { args .get(index) .ok_or_else(|| anyhow::anyhow!("Failed to read {key} from args")) diff --git a/crates/gpapi/src/gateway/parse_gateways.rs b/crates/gpapi/src/gateway/parse_gateways.rs index 384c382..70cc6ea 100644 --- a/crates/gpapi/src/gateway/parse_gateways.rs +++ b/crates/gpapi/src/gateway/parse_gateways.rs @@ -4,9 +4,7 @@ use super::{Gateway, PriorityRule}; pub(crate) fn parse_gateways(doc: &Document) -> Option> { let node_gateways = doc.descendants().find(|n| n.has_tag_name("gateways"))?; - let list_gateway = node_gateways - .descendants() - .find(|n| n.has_tag_name("list"))?; + let list_gateway = node_gateways.descendants().find(|n| n.has_tag_name("list"))?; let gateways = list_gateway .children() diff --git a/crates/gpapi/src/portal/config.rs b/crates/gpapi/src/portal/config.rs index 0efba34..e20981a 100644 --- a/crates/gpapi/src/portal/config.rs +++ b/crates/gpapi/src/portal/config.rs @@ -79,21 +79,11 @@ impl PortalConfig { } // If no gateway is found, return the gateway with the lowest priority - preferred_gateway.unwrap_or_else(|| { - self - .gateways - .iter() - .min_by_key(|gateway| gateway.priority) - .unwrap() - }) + preferred_gateway.unwrap_or_else(|| self.gateways.iter().min_by_key(|gateway| gateway.priority).unwrap()) } } -pub async fn retrieve_config( - portal: &str, - cred: &Credential, - gp_params: &GpParams, -) -> anyhow::Result { +pub async fn retrieve_config(portal: &str, cred: &Credential, gp_params: &GpParams) -> anyhow::Result { let portal = normalize_server(portal)?; let server = remove_url_scheme(&portal); @@ -116,24 +106,17 @@ pub async fn retrieve_config( let status = res.status(); if status == StatusCode::NOT_FOUND { - bail!(PortalError::ConfigError( - "Config endpoint not found".to_string() - )) + bail!(PortalError::ConfigError("Config endpoint not found".to_string())) } if status.is_client_error() || status.is_server_error() { bail!("Portal config error: {}", status) } - let res_xml = res - .text() - .await - .map_err(|e| PortalError::ConfigError(e.to_string()))?; + let res_xml = res.text().await.map_err(|e| PortalError::ConfigError(e.to_string()))?; if res_xml.is_empty() { - bail!(PortalError::ConfigError( - "Empty portal config response".to_string() - )) + bail!(PortalError::ConfigError("Empty portal config response".to_string())) } let doc = Document::parse(&res_xml).map_err(|e| PortalError::ConfigError(e.to_string()))?; @@ -144,8 +127,7 @@ pub async fn retrieve_config( }); let user_auth_cookie = xml::get_child_text(&doc, "portal-userauthcookie").unwrap_or_default(); - let prelogon_user_auth_cookie = - xml::get_child_text(&doc, "portal-prelogonuserauthcookie").unwrap_or_default(); + let prelogon_user_auth_cookie = xml::get_child_text(&doc, "portal-prelogonuserauthcookie").unwrap_or_default(); let config_digest = xml::get_child_text(&doc, "config-digest"); if gateways.is_empty() { @@ -154,11 +136,7 @@ pub async fn retrieve_config( Ok(PortalConfig { portal: server.to_string(), - auth_cookie: AuthCookieCredential::new( - cred.username(), - &user_auth_cookie, - &prelogon_user_auth_cookie, - ), + auth_cookie: AuthCookieCredential::new(cred.username(), &user_auth_cookie, &prelogon_user_auth_cookie), config_cred: cred.clone(), gateways, config_digest, diff --git a/crates/gpapi/src/portal/prelogin.rs b/crates/gpapi/src/portal/prelogin.rs index 018d8e0..2a218b8 100644 --- a/crates/gpapi/src/portal/prelogin.rs +++ b/crates/gpapi/src/portal/prelogin.rs @@ -102,11 +102,7 @@ pub async fn prelogin(portal: &str, gp_params: &GpParams) -> anyhow::Result anyhow::Result anyhow::Result anyhow::Result anyhow::Result // Check if the prelogin response is SAML if saml_method.is_some() && saml_request.is_some() { let saml_request = base64::decode_to_string(&saml_request.unwrap())?; - let support_default_browser = saml_default_browser - .map(|s| s.to_lowercase() == "yes") - .unwrap_or(false); + let support_default_browser = saml_default_browser.map(|s| s.to_lowercase() == "yes").unwrap_or(false); let saml_prelogin = SamlPrelogin { region, @@ -188,8 +175,8 @@ fn parse_res_xml(res_xml: String, is_gateway: bool) -> anyhow::Result let label_password = xml::get_child_text(&doc, "password-label"); // Check if the prelogin response is standard login if label_username.is_some() && label_password.is_some() { - let auth_message = xml::get_child_text(&doc, "authentication-message") - .unwrap_or(String::from("Please enter the login credentials")); + let auth_message = + xml::get_child_text(&doc, "authentication-message").unwrap_or(String::from("Please enter the login credentials")); let standard_prelogin = StandardPrelogin { region, is_gateway, diff --git a/crates/gpapi/src/process/auth_launcher.rs b/crates/gpapi/src/process/auth_launcher.rs index 079c2af..b82d72b 100644 --- a/crates/gpapi/src/process/auth_launcher.rs +++ b/crates/gpapi/src/process/auth_launcher.rs @@ -129,7 +129,7 @@ impl<'a> SamlAuthLauncher<'a> { .wait_with_output() .await?; - let auth_result: SamlAuthResult = serde_json::from_slice(&output.stdout) + let auth_result = serde_json::from_slice::(&output.stdout) .map_err(|_| anyhow::anyhow!("Failed to parse auth data"))?; match auth_result { diff --git a/crates/gpapi/src/process/command_traits.rs b/crates/gpapi/src/process/command_traits.rs index c867d6c..e20f3cc 100644 --- a/crates/gpapi/src/process/command_traits.rs +++ b/crates/gpapi/src/process/command_traits.rs @@ -21,8 +21,7 @@ impl CommandExt for Command { } fn into_non_root(mut self) -> anyhow::Result { - let user = - get_non_root_user().map_err(|_| anyhow::anyhow!("{:?} cannot be run as root", self))?; + let user = get_non_root_user().map_err(|_| anyhow::anyhow!("{:?} cannot be run as root", self))?; self .env("HOME", user.home_dir()) @@ -42,8 +41,7 @@ fn get_non_root_user() -> anyhow::Result { let user = if current_user == "root" { get_real_user()? } else { - uzers::get_user_by_name(¤t_user) - .ok_or_else(|| anyhow::anyhow!("User ({}) not found", current_user))? + uzers::get_user_by_name(¤t_user).ok_or_else(|| anyhow::anyhow!("User ({}) not found", current_user))? }; if user.uid() == 0 { diff --git a/crates/gpapi/src/process/gui_launcher.rs b/crates/gpapi/src/process/gui_launcher.rs index 47dc6c2..48bd166 100644 --- a/crates/gpapi/src/process/gui_launcher.rs +++ b/crates/gpapi/src/process/gui_launcher.rs @@ -66,10 +66,7 @@ impl GuiLauncher { let mut non_root_cmd = cmd.into_non_root()?; - let mut child = non_root_cmd - .kill_on_drop(true) - .stdin(Stdio::piped()) - .spawn()?; + let mut child = non_root_cmd.kill_on_drop(true).stdin(Stdio::piped()).spawn()?; let mut stdin = child .stdin diff --git a/crates/gpapi/src/service/request.rs b/crates/gpapi/src/service/request.rs index 753b9ba..e80f68e 100644 --- a/crates/gpapi/src/service/request.rs +++ b/crates/gpapi/src/service/request.rs @@ -58,10 +58,7 @@ impl ConnectArgs { } pub fn openconnect_os(&self) -> Option { - self - .os - .as_ref() - .map(|os| os.to_openconnect_os().to_string()) + self.os.as_ref().map(|os| os.to_openconnect_os().to_string()) } } diff --git a/crates/gpapi/src/utils/mod.rs b/crates/gpapi/src/utils/mod.rs index 834266e..e6ce4dd 100644 --- a/crates/gpapi/src/utils/mod.rs +++ b/crates/gpapi/src/utils/mod.rs @@ -30,9 +30,7 @@ pub fn normalize_server(server: &str) -> anyhow::Result { .host_str() .ok_or(anyhow::anyhow!("Invalid server URL: missing host"))?; - let port: String = normalized_url - .port() - .map_or("".into(), |port| format!(":{}", port)); + let port: String = normalized_url.port().map_or("".into(), |port| format!(":{}", port)); let normalized_url = format!("{}://{}{}", scheme, host, port); diff --git a/crates/gpapi/src/utils/redact.rs b/crates/gpapi/src/utils/redact.rs index 7917b18..59fdd54 100644 --- a/crates/gpapi/src/utils/redact.rs +++ b/crates/gpapi/src/utils/redact.rs @@ -115,12 +115,7 @@ pub fn redact_uri(uri: &str) -> String { .map(|query| format!("?{}", query)) .unwrap_or_default(); - return format!( - "{}://[**********]{}{}", - url.scheme(), - url.path(), - redacted_query - ); + return format!("{}://[**********]{}{}", url.scheme(), url.path(), redacted_query); } let redacted_query = redact_query(url.query()); @@ -165,10 +160,7 @@ mod tests { redaction.add_value("foo").unwrap(); - assert_eq!( - redaction.redact_str("hello, foo, bar"), - "hello, [**********], bar" - ); + assert_eq!(redaction.redact_str("hello, foo, bar"), "hello, [**********], bar"); } #[test] diff --git a/crates/gpapi/src/utils/shutdown_signal.rs b/crates/gpapi/src/utils/shutdown_signal.rs index bab9069..1f1f1fc 100644 --- a/crates/gpapi/src/utils/shutdown_signal.rs +++ b/crates/gpapi/src/utils/shutdown_signal.rs @@ -2,9 +2,7 @@ use tokio::signal; pub async fn shutdown_signal() { let ctrl_c = async { - signal::ctrl_c() - .await - .expect("failed to install Ctrl+C handler"); + signal::ctrl_c().await.expect("failed to install Ctrl+C handler"); }; #[cfg(unix)] diff --git a/crates/openconnect/build.rs b/crates/openconnect/build.rs index 42eb240..0220ce0 100644 --- a/crates/openconnect/build.rs +++ b/crates/openconnect/build.rs @@ -5,8 +5,5 @@ fn main() { println!("cargo:rerun-if-changed=src/ffi/vpn.h"); // Compile the vpn.c file - cc::Build::new() - .file("src/ffi/vpn.c") - .include("src/ffi") - .compile("vpn"); + cc::Build::new().file("src/ffi/vpn.c").include("src/ffi").compile("vpn"); } diff --git a/crates/openconnect/src/ffi/mod.rs b/crates/openconnect/src/ffi/mod.rs index 733f246..c312eda 100644 --- a/crates/openconnect/src/ffi/mod.rs +++ b/crates/openconnect/src/ffi/mod.rs @@ -20,10 +20,7 @@ pub(crate) struct ConnectOptions { #[link(name = "vpn")] extern "C" { #[link_name = "vpn_connect"] - fn vpn_connect( - options: *const ConnectOptions, - callback: extern "C" fn(i32, *mut c_void), - ) -> c_int; + fn vpn_connect(options: *const ConnectOptions, callback: extern "C" fn(i32, *mut c_void)) -> c_int; #[link_name = "vpn_disconnect"] fn vpn_disconnect(); diff --git a/crates/openconnect/src/vpn.rs b/crates/openconnect/src/vpn.rs index 25905a6..b260804 100644 --- a/crates/openconnect/src/vpn.rs +++ b/crates/openconnect/src/vpn.rs @@ -27,11 +27,7 @@ impl Vpn { } pub fn connect(&self, on_connected: impl FnOnce() + 'static + Send + Sync) -> i32 { - self - .callback - .write() - .unwrap() - .replace(Box::new(on_connected)); + self.callback.write().unwrap().replace(Box::new(on_connected)); let options = self.build_connect_options(); ffi::connect(&options) @@ -107,10 +103,7 @@ impl VpnBuilder { pub fn build(self) -> Vpn { let user_agent = self.user_agent.unwrap_or_default(); - let script = self - .script - .or_else(find_default_vpnc_script) - .unwrap_or_default(); + let script = self.script.or_else(find_default_vpnc_script).unwrap_or_default(); let os = self.os.unwrap_or("linux".to_string()); Vpn { diff --git a/rustfmt.toml b/rustfmt.toml index 12f98a0..8e48418 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,4 +1,4 @@ -max_width = 100 +max_width = 120 hard_tabs = false tab_spaces = 2 newline_style = "Unix"