fn set_up_gateway_service_url()

in shenyu-client-rust/src/core.rs [128:195]


    fn set_up_gateway_service_url(&mut self) -> Result<(), String> {
        self.gateway_base_urls = self
            .env
            .register
            .servers
            .split(',')
            .map(ToString::to_string)
            .collect();
        if self.gateway_base_urls.is_empty() {
            return Err(String::from("shenyu.register.servers is empty"));
        }

        self.register_meta_data_path_list = self
            .gateway_base_urls
            .iter()
            .map(|url| format!("{url}{REGISTER_META_DATA_SUFFIX}"))
            .collect();
        self.register_uri_list = self
            .gateway_base_urls
            .iter()
            .map(|url| format!("{url}{REGISTER_URI_SUFFIX}"))
            .collect();
        self.register_token_servers = self
            .gateway_base_urls
            .iter()
            .map(|url| format!("{url}{PLATFORM_LOGIN_SUFFIX}"))
            .collect();
        self.register_discover_config_servers = self
            .gateway_base_urls
            .iter()
            .map(|url| format!("{url}{REGISTER_DISCOVERY_CONFIG_SUFFIX}"))
            .collect();
        self.register_offline_servers = self
            .gateway_base_urls
            .iter()
            .map(|url| format!("{url}{REGISTER_OFFLINE_SUFFIX}"))
            .collect();

        #[allow(unused_assignments)]
        let mut host = None;
        #[cfg(not(target_os = "macos"))]
        {
            host = match local_ip_address::local_ip() {
                Ok(IpAddr::V4(ipv4)) => Some(IpAddr::V4(ipv4)),
                Ok(IpAddr::V6(ipv6)) => Some(IpAddr::from(ipv6.to_ipv4().unwrap())),
                _ => None,
            };
        }
        #[cfg(target_os = "macos")]
        {
            use local_ip_address::macos;
            for (_, ipaddr) in macos::list_afinet_netifas().unwrap() {
                if IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1)).eq(&ipaddr) {
                    continue;
                }
                host = match ipaddr {
                    IpAddr::V4(ipv4) => Some(IpAddr::from(ipv4)),
                    IpAddr::V6(_) => continue,
                };
            }
        }
        if let Some(host) = host {
            self.host = Some(host.to_string());
            Ok(())
        } else {
            Err("Failed to determine local IP address".to_string())
        }
    }