lsys-lib-area 0.1.0

行政区域数据,坐标对应城市数据
Documentation
use std::path::PathBuf;

use crate::{AreaError, AreaResult};

#[allow(dead_code)]
pub(crate) fn read_file_md5(path: &PathBuf) -> String {
    use sha2::{Digest, Sha256};
    use std::{fs, io};
    if let Ok(mut file) = fs::File::open(path) {
        let mut hasher = Sha256::new();
        if io::copy(&mut file, &mut hasher).is_ok() {
            return format!("{:x}", hasher.finalize());
        }
    }
    "".to_string()
}
#[allow(dead_code)]
pub(crate) fn read_file(path: &PathBuf) -> AreaResult<Vec<u8>> {
    std::fs::read(path).map_err(|e| AreaError::System(e.to_string()))
}

pub(crate) fn de_gz_data(zip_data: Vec<u8>) -> AreaResult<Vec<u8>> {
    let mut s = vec![];
    use std::io::Read;
    let mut gz = flate2::read::GzDecoder::new(&zip_data[..]);
    gz.read_to_end(&mut s)
        .map_err(|e| AreaError::System(e.to_string()))?;
    Ok(s)
}
pub(crate) fn en_name_keyword(input: &str) -> String {
    let mut result = String::new();
    let mut prev_char = ' ';

    for c in input.chars() {
        if c.is_uppercase() {
            if !prev_char.is_whitespace() {
                result.push(' ');
            }
            result.push(c.to_ascii_lowercase());
        } else {
            result.push(c);
        }
        prev_char = c;
    }

    result
}