#![allow(dead_code)]
use serde_json::Value;
use std::collections::HashMap;
use crate::utils;
fn fetch_mapping() -> Result<reqwest::blocking::Response, Box<dyn std::error::Error>> {
utils::fetch_url(
&String::from(
"https://raw.githubusercontent.com/PyFunceble/iana/master/iana-domains-db.json",
),
String::from("Failed to fetch IANA extensions. Is GitHub down?"),
)
}
pub fn extensions() -> Result<Vec<String>, Box<dyn std::error::Error>> {
let response: Value = fetch_mapping()?.json()?;
let mut result: Vec<String> = Vec::new();
for (key, _) in response.as_object().unwrap() {
result.push(key.to_string());
}
Ok(result)
}
pub fn extensions_regex_string() -> String {
utils::to_regex_string(extensions())
}
pub fn extensions_and_whois() -> Result<HashMap<String, Option<String>>, Box<dyn std::error::Error>>
{
let response: Value = fetch_mapping()?.json()?;
let mut result: HashMap<String, Option<String>> = HashMap::new();
for (key, value) in response.as_object().unwrap() {
result.insert(
key.to_string(),
Some(value.as_str().unwrap_or("").to_string()),
);
}
Ok(result)
}