use reqwest::Url; use std::str::FromStr; pub(crate) fn ensure_proto(url_str: &str) -> String { if url_str.is_empty() { return "".to_string(); } if url_str.starts_with("http://") || url_str.starts_with("https://") { return url_str.to_string(); } // Url::from_str will fail without a proto, so add one let parseable_url = format!("http://{}", url_str); if let Ok(u) = Url::from_str(parseable_url.as_str()) { match u.host() { Some(host) => { let h = host.to_string(); // These TLDs force HTTPS if h.ends_with(".app") || h.ends_with(".dev") || h.ends_with(".page") { return format!("https://{url_str}"); } } None => {} } } format!("http://{url_str}") }