1pub fn url(url: &str) -> bool {
2 let url_parts: Vec<&str> = url.split("://").collect();
3
4 if url_parts.len() != 2 {
5 return false;
6 }
7
8 let scheme = url_parts[0];
9 let rest = url_parts[1];
10
11 if scheme != "http" && scheme != "https" {
12 return false;
13 }
14
15 let domain_and_path: Vec<&str> = rest.split('/').collect();
16
17 if domain_and_path.is_empty() || domain_and_path[0].is_empty() {
18 return false;
19 }
20
21 let domain = domain_and_path[0];
22
23 if !domain.contains('.') {
24 return false;
25 }
26
27 let domain_parts: Vec<&str> = domain.split('.').collect();
28
29 for part in domain_parts {
30 if part.is_empty()
31 || !part.chars().next().unwrap().is_alphanumeric()
32 || !part.chars().last().unwrap().is_alphanumeric()
33 {
34 return false;
35 }
36 }
37
38 true
39}