Crates.io | maxminddb-uf |
lib.rs | maxminddb-uf |
version | 0.1.3 |
source | src |
created_at | 2022-07-18 13:32:31.746483 |
updated_at | 2022-07-18 18:46:36.088155 |
description | User-friendly MaxMindDB wrapper around `maxminddb` crate |
homepage | https://github.com/chirok11/maxminddb-uf |
repository | |
max_upload_size | |
id | 627754 |
size | 10,971 |
This is simple wrapper around maxminddb
crate.
Example:
let reader = maxminddb::Reader::open_readfile("./GeoLite2-City.mmdb").uwnrap();
let normalized_db = NormalizedDatabase::from(reader);
let addr = IpAddr::from_str("1.1.1.1").unwrap();
let record = normalized_db.lookup(addr); // Returns Result<NormalizedRecord, MaxMindDBError>
let record = record.unwrap();
record.postal_code(); // Option<&str>
record.city_name(language? (Option<&str>); // Option<String>
record.continent_name(language? (Option<&str>); // Option<String>
and more functions.
Just let me show you sample of code that you may use with this crate.
let country = record
.country_name(None)
.or(record.registered_country_name(None))
.or(record.represented_country_name(None));
or
let localized_name = record
.country_name(Some("de"))
.or(record.country_name(None));
I have thoughts that looks better than.
let record = maxminddb.lookup(ip);
let c = record.country
.and_then(|c| c.names)
.and_then(|n| n.get("de"));
if let None = c {
let c = record.registered_country
.and_then(|c| c.names)
.and_then(|n| n.get("en"));
}
Example with falling back through represented country and registered country would be bigger instead of few lines with this wrapper.