use url::Url;
pub const DEFAULT_SERVER: &str = "http://127.0.0.1:4173";
pub fn parse_server(input: &str) -> Result<Url, String> {
let trimmed = input.trim();
if trimmed.is_empty() {
return Url::parse(DEFAULT_SERVER).map_err(|e| e.to_string());
}
Url::parse(trimmed).map_err(|e| format!("invalid --server URL {trimmed:?}: {e}"))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_server_is_local_4173() {
let u = Url::parse(DEFAULT_SERVER).unwrap();
assert_eq!(u.scheme(), "http");
assert_eq!(u.host_str(), Some("127.0.0.1"));
assert_eq!(u.port(), Some(4173));
}
#[test]
fn empty_input_falls_back_to_default() {
let u = parse_server("").unwrap();
assert_eq!(u.as_str(), format!("{DEFAULT_SERVER}/"));
}
#[test]
fn valid_url_round_trips() {
let u = parse_server("https://example.com:9000/").unwrap();
assert_eq!(u.scheme(), "https");
assert_eq!(u.host_str(), Some("example.com"));
assert_eq!(u.port(), Some(9000));
}
#[test]
fn invalid_url_returns_err() {
assert!(parse_server("not a url").is_err());
}
}