#user-friendly #wrapper #city #record #language #maxminddb #max-mind-db

maxminddb-uf

用户友好的MaxMindDB包装器,围绕maxminddbcrate

4个版本

0.1.3 2022年7月18日
0.1.2 2022年7月18日
0.1.1 2022年7月18日
0.1.0 2022年7月18日

#1796数据库接口

ISC许可证

11KB
155

MaxMindDB-UF

与MaxMind城市数据库交互的用户友好库

这是对maxminddbcrate的简单包装。

示例

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>

和更多功能。

为什么创建这个包装器?

让我给您展示一些示例代码,您可以使用这个crate。

let country = record
                .country_name(None)
                .or(record.registered_country_name(None))
                .or(record.represented_country_name(None));

let localized_name = record
                    .country_name(Some("de"))
                    .or(record.country_name(None));

我有一些想法看起来比。

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"));
}

使用这个包装器,通过表示的国家和注册的国家回退的示例将比几行代码更长。

依赖关系

~0.7–1.4MB
~31K SLoC