use crate::geoip::mmdb_wire::{IPV4, database, map, string, uint32};
#[cfg(feature = "geoip-lookup")]
const IPV6: u16 = 6;
fn asn_record(number: u32, organisation: &str) -> Vec<u8> {
map(&[
("autonomous_system_number", uint32(number)),
("autonomous_system_organization", string(organisation)),
])
}
#[cfg(feature = "geoip-lookup")]
fn city_record(iso_code: &str) -> Vec<u8> {
map(&[("country", map(&[("iso_code", string(iso_code))]))])
}
pub(crate) fn asn_mmdb(number: u32, organisation: &str) -> Vec<u8> {
database(&asn_record(number, organisation), 0, "GeoLite2-ASN", IPV4)
}
#[cfg(feature = "geoip-lookup")]
pub(crate) fn asn_mmdb_v6(number: u32, organisation: &str) -> Vec<u8> {
database(&asn_record(number, organisation), 0, "GeoLite2-ASN", IPV6)
}
#[cfg(feature = "geoip-lookup")]
pub(crate) fn city_mmdb(iso_code: &str) -> Vec<u8> {
database(&city_record(iso_code), 0, "GeoLite2-City", IPV4)
}
#[cfg(feature = "geoip-lookup")]
pub(crate) fn city_mmdb_v6(iso_code: &str) -> Vec<u8> {
database(&city_record(iso_code), 0, "GeoLite2-City", IPV6)
}
#[cfg(feature = "geoip-lookup")]
pub(crate) fn flat_city_mmdb(country_code: &str) -> Vec<u8> {
database(
&map(&[
("country_code", string(country_code)),
("continent_code", string("OC")),
]),
0,
"ipinfo lite",
IPV4,
)
}