use serde::{Deserialize, Serialize};
use crate::err::{DeserializeErr};
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct AdminCode {
pub country_code: String,
pub code: String,
pub name: String,
pub geo_name_id: i32,
}
impl AdminCode {
pub fn deserialize_from_string(str: &str) -> Result<Self, DeserializeErr> {
let vec = str.split(" ").collect::<Vec<&str>>();
let code = vec[0].split(".").collect::<Vec<&str>>();
Ok(Self {
country_code: code[0].to_owned(),
code: code[1].to_owned(),
name: vec[1].to_owned(),
geo_name_id: vec[3].parse::<i32>()?,
})
}
}
#[cfg(test)]
mod tests {
use crate::model::AdminCode;
#[test]
fn deserialize_string_to_admin_code() {
use std::fs::File;
use std::io::{BufRead, BufReader};
for line in BufReader::new(File::open("./test-data/admin1CodesASCII.txt").unwrap()).lines() {
let _admin_code = AdminCode::deserialize_from_string(&line.unwrap()).unwrap();
}
}
}