use serde::Deserialize;
use serde_aux::prelude::serde_introspect;
pub fn build_url_from_struct<'de, T>(https: bool, ip: &String) -> String
where
T: Deserialize<'de>,
{
let fields = serde_introspect::<T>();
build_url_with_fields(https, ip, fields)
}
pub fn build_http_url_from_struct<'de, T>(ip: &String) -> String
where
T: Deserialize<'de>,
{
let fields = serde_introspect::<T>();
build_url_with_fields(false, ip, fields)
}
pub fn build_https_url_from_struct<'de, T>(ip: &String) -> String
where
T: Deserialize<'de>,
{
let fields = serde_introspect::<T>();
build_url_with_fields(true, ip, fields)
}
pub fn build_url_without_fields(https: bool, ip: &String) -> String {
match https {
true => format!("{}{}", crate::constant::HTTPS_HOST, ip),
false => format!("{}{}", crate::constant::HTTP_HOST, ip),
}
}
pub fn build_url_with_fields(https: bool, ip: &String, fields: &[&'static str]) -> String {
let mut fields_str = fields.join(",");
if !fields.contains(&"message") {
fields_str = fields.join(",") + ",message";
}
match https {
true => format!("{}{}?fields={}", crate::constant::HTTPS_HOST, ip, fields_str),
false => format!("{}{}?fields={}", crate::constant::HTTP_HOST, ip, fields_str),
}
}