qnip 0.1.0

Qiniu IP Query library for Rust
Documentation
use std::io;
use crate::formats::{Query, QueryBuilder};
use crate::data::{VersionInfo, IpInfo};
mod reader;

struct IpdbBuilder {
}

impl QueryBuilder for IpdbBuilder {
    fn build(bytes: &[u8]) -> io::Result<Box<dyn Query>> {
        let reader = Ipdb::new(bytes)?;
        Ok(Box::new(reader))
    }
}

pub struct Ipdb {
    reader: reader::Reader,
}

impl Ipdb {
    pub fn new(data: &[u8]) -> io::Result<Ipdb> {
        let reader = reader::Reader::new(&data)?;
        Ok(Ipdb { reader })
    }
}

impl Query for Ipdb {
    fn query(&self, ip:&[u8]) -> io::Result<IpInfo>{
        self.reader.find(ip, "CN", true)
    }

    fn build_cache(&mut self, _ip_list:&Vec<String>) {
        println!("ipdb build_cache");
    }

    fn version(&self) -> VersionInfo {
        println!("ipdb get_version");
        VersionInfo {
            ip_type: self.reader.meta.ip_version,
            count: self.reader.meta.node_count,
            build: self.reader.meta.build,
            version: match &self.reader.meta.version {
                None => format!("ipip.net-{}", self.reader.meta.build),
                Some(s) => s.to_string(),
            },
            languages: vec!["CN".into()],
            extra_info: self.reader.meta.extra.clone(),
        }
    }
}