IPDB RS library

example:

```rust use ipdb::Reader; use anyhow::; use lazy_static::;

lazystatic!{ static ref IPDB:Reader={ Reader::openfile("ipipfree.ipdb").unwrap() }; }

fn main()->Result<()> { let r= IPDB.find("199.193.127.3","CN")?; println!("{:?}",r); let r= IPDB.findcityinfo("199.193.127.3","CN")?; println!("{:?}",r); let r= IPDB.finddistrictinfo("199.193.127.3","CN")?; println!("{:?}",r); let r= IPDB.findidcinfo("199.193.127.3","CN")?; println!("{:?}",r); let r= IPDB.findbasestationinfo("199.193.127.3","CN")?; println!("{:?}",r); Ok(()) } shell .../.cargo/bin/cargo.exe run --color=always --package ipdb --example main Finished dev [unoptimized + debuginfo] target(s) in 0.05s Running target\debug\examples\main.exe ["美国", "加利福尼亚州", "洛杉矶", "", "it7.net", "34.052234", "-118.243685", "America/LosAngeles", "UTC-7", "", "1", "US", "NA"] CityInfo { countryname: "美国", regionname: "加利福尼亚州", cityname: "洛杉矶", ownerdomain: "", ispdomain: "it7.net", latitude: "34.052234", longitude: "-118.243685", timezone: "America/LosAngeles", utcoffset: "UTC-7", chinaadmincode: "", iddcode: "1", countrycode: "US", continentcode: "NA", idc: "", basestation: "", countrycode3: "", europeanunion: "", currencycode: "", currencyname: "", anycast: "" } DistrictInfo { countryname: "美国", regionname: "加利福尼亚州", cityname: "洛杉矶", ownerdomain: "", ispdomain: "it7.net", latitude: "34.052234", longitude: "-118.243685" } IdcInfo { countryname: "美国", regionname: "加利福尼亚州", cityname: "洛杉矶", ownerdomain: "", ispdomain: "it7.net", idc: "34.052234" } BaseStationInfo { countryname: "美国", regionname: "加利福尼亚州", cityname: "洛杉矶", ownerdomain: "", ispdomain: "it7.net", base_station: "34.052234" }

Process finished with exit code 0 ```

bench

```shell running 12 tests test bench0500::testipdb ... bench: 261,625 ns/iter (+/- 13,556) test bench0500::testipdbrs ... bench: 318,980 ns/iter (+/- 9,253) test bench1000::testipdb ... bench: 522,450 ns/iter (+/- 9,787) test bench1000::testipdbrs ... bench: 635,570 ns/iter (+/- 17,337) test bench2000::testipdb ... bench: 1,048,630 ns/iter (+/- 71,659) test bench2000::testipdbrs ... bench: 1,273,910 ns/iter (+/- 43,754) test bench4000::testipdb ... bench: 2,096,190 ns/iter (+/- 33,412) test bench4000::testipdbrs ... bench: 2,554,980 ns/iter (+/- 36,575) test bench6000::testipdb ... bench: 3,140,700 ns/iter (+/- 52,065) test bench6000::testipdbrs ... bench: 3,837,500 ns/iter (+/- 49,432) test bench8000::testipdb ... bench: 4,191,190 ns/iter (+/- 49,141) test bench8000::testipdbrs ... bench: 5,121,350 ns/iter (+/- 47,059)

test result: ok. 0 passed; 0 failed; 0 ignored; 12 measured; 0 filtered out; finished in 7.99s ```