Opinionated Android 15+ Linux Terminal Setup
android linux command-line-tools
at main 59 lines 1.6 kB view raw
1use url::Url; 2 3pub fn extract_repo_name(url: &str) -> Option<String> { 4 let parsed = Url::parse(url).ok()?; 5 let mut segments = parsed.path_segments()?; 6 let username = segments.next()?; 7 let mut repo = segments.next()?; 8 9 if let Some(stripped) = repo.strip_suffix(".git") { 10 repo = stripped; 11 } 12 13 Some(format!("{}-{}", username, repo)) 14} 15 16pub fn extract_version(url: &str) -> (String, Option<String>) { 17 let repo_name = url.replace("https://tangled.sh/", "").replace("@", ""); 18 match url.rfind('@') { 19 Some(idx) => { 20 let (repo, version) = url.split_at(idx); 21 let version = &version[1..]; 22 match version == repo_name { 23 true => (url.to_string(), None), 24 false => (repo.to_string(), Some(version.to_string())), 25 } 26 } 27 None => (url.to_string(), None), 28 } 29} 30 31#[cfg(test)] 32mod tests { 33 34 use super::*; 35 36 #[test] 37 fn test_extract_repo_name() { 38 let url = "https://github.com/tsirysndr/pkgs.git"; 39 let expected = Some("tsirysndr-pkgs".into()); 40 let result = extract_repo_name(url); 41 assert_eq!(result, expected); 42 } 43 44 #[test] 45 fn test_extract_repo_name_no_git() { 46 let url = "https://github.com/tsirysndr/pkgs"; 47 let expected = Some("tsirysndr-pkgs".into()); 48 let result = extract_repo_name(url); 49 assert_eq!(result, expected); 50 } 51 52 #[test] 53 fn test_extract_repo_name_invalid_url() { 54 let url = "invalid-url"; 55 let expected = None; 56 let result = extract_repo_name(url); 57 assert_eq!(result, expected); 58 } 59}