diff --git a/binding/rust/example/src/cmd.rs b/binding/rust/example/src/cmd.rs index 24ce79a..e5c096b 100644 --- a/binding/rust/example/src/cmd.rs +++ b/binding/rust/example/src/cmd.rs @@ -2,10 +2,19 @@ use clap::{Parser, Subcommand, ValueEnum}; /// Rust binding example for ip2region /// -/// `cargo run -- --xdb=../../../data/ip2region_v4.xdb bench ../../../data/ip.test.txt` +/// e.g /// -/// `cargo run -- --xdb=../../../data/ip2region_v4.xdb query` +/// ``` /// +/// export XDB='../../../data/ip2region_v4.xdb' +/// +/// export CHECK='../../../data/ipv4_source.txt' +/// +/// cargo run -- --xdb=$XDB bench $CHECK +/// +/// cargo run -- --xdb=$XDB query +/// +/// ``` #[derive(Parser)] pub struct Command { /// xdb filepath, e.g. `../../../data/ip2region_v4.xdb` diff --git a/binding/rust/example/src/main.rs b/binding/rust/example/src/main.rs index 048adf8..a85def5 100644 --- a/binding/rust/example/src/main.rs +++ b/binding/rust/example/src/main.rs @@ -1,7 +1,7 @@ extern crate core; use std::fs::File; -use std::io::Read; +use std::io::{BufRead, BufReader}; use std::io::Write; use std::net::Ipv4Addr; use std::str::FromStr; @@ -14,13 +14,15 @@ use crate::cmd::{Action, CmdCachePolicy, Command}; mod cmd; fn bench(searcher: &Searcher, check_filepath: &str) { + let file = File::open(check_filepath).unwrap(); + let reader = BufReader::new(file); + + let lines = reader.lines().take(100_000).collect::>(); let now = Instant::now(); let mut count = 0; - let mut file = File::open(check_filepath).unwrap(); - let mut contents = String::new(); - file.read_to_string(&mut contents).unwrap(); - for line in contents.split('\n') { + for line in lines { + let line = line.unwrap(); if !line.contains('|') { continue; }