use std::collections::HashMap;
const DOMAIN_GARDEN_ADDRESS: &str = "https://cg.play-analytics.com";
const DOMAIN_QUERY_TIMEOUT_SECS: u64 = 1;
const LICENSE_TBUS: &str = "TBUS";
const DOMAIN_KEY_COMMON: &str = "COMMON";
const GATEWAY_SUFFIX: &str = "/gateway";
pub fn query_domains(license: Option<&str>) -> HashMap<String, serde_json::Value> {
do_query_domains(license).unwrap_or_default()
}
fn do_query_domains(license: Option<&str>) -> Option<HashMap<String, serde_json::Value>> {
let mut url = DOMAIN_GARDEN_ADDRESS.to_string();
if license == Some(LICENSE_TBUS) {
url.push_str("?appName=tradeup");
}
let agent = ureq::AgentBuilder::new()
.timeout_connect(std::time::Duration::from_secs(DOMAIN_QUERY_TIMEOUT_SECS))
.timeout_read(std::time::Duration::from_secs(DOMAIN_QUERY_TIMEOUT_SECS))
.build();
let resp: serde_json::Value = agent.get(&url).call().ok()?.into_json().ok()?;
let items = resp.get("items")?.as_array()?;
let first = items.first()?;
let openapi = first.get("openapi")?;
let conf: HashMap<String, serde_json::Value> = serde_json::from_value(openapi.clone()).ok()?;
Some(conf)
}
pub fn resolve_dynamic_server_url(
domain_conf: &HashMap<String, serde_json::Value>,
license: Option<&str>,
) -> Option<String> {
if domain_conf.is_empty() {
return None;
}
let key = license.unwrap_or(DOMAIN_KEY_COMMON);
if let Some(url) = domain_conf.get(key).and_then(|v| v.as_str()) {
return Some(format!("{}{}", url, GATEWAY_SUFFIX));
}
if let Some(url) = domain_conf.get(DOMAIN_KEY_COMMON).and_then(|v| v.as_str()) {
return Some(format!("{}{}", url, GATEWAY_SUFFIX));
}
None
}