naia_socket_shared/
url_parse.rs1use std::net::SocketAddr;
2
3use url::Url;
4
5pub fn parse_server_url(server_url_str: &str) -> Url {
6 let url = Url::parse(server_url_str).expect("server_url_str is not a valid URL!");
7 if let Some(path_segments) = url.path_segments() {
8 let path_segment_count = path_segments.count();
9 if path_segment_count > 1 {
10 log::error!("server_url_str must not include a path");
11 panic!("");
12 }
13 }
14 if url.query().is_some() {
15 log::error!("server_url_str must not include a query string");
16 panic!("");
17 }
18 if url.fragment().is_some() {
19 log::error!("server_url_str must not include a fragment");
20 panic!("");
21 }
22
23 url
24}
25
26cfg_if! {
27 if #[cfg(not(target_arch = "wasm32"))]
28 {
29 pub fn url_to_socket_addr(url: &Url) -> SocketAddr {
30 const SOCKET_PARSE_FAIL_STR: &str = "could not get SocketAddr from input URL";
31
32 match url.socket_addrs(|| match url.scheme() {
33 "http" => Some(80),
34 "https" => Some(443),
35 _ => None,
36 }) {
37 Ok(addr_list) => {
38 if addr_list.is_empty() {
39 log::error!("{}", SOCKET_PARSE_FAIL_STR);
40 panic!("");
41 }
42
43 return *addr_list.first().expect(SOCKET_PARSE_FAIL_STR);
44 }
45 Err(err) => {
46 log::error!("URL -> SocketAddr parse fails with: {:?}", err);
47 panic!("");
48 }
49 }
50 }
51 } else {
52 pub fn url_to_socket_addr(_url: &Url) -> SocketAddr {
53 panic!("should not need this method for Wasm apps");
54 }
55 }
56}