geonames_lib/model/
admin_code.rs1use serde::{Deserialize, Serialize};
2use crate::err::{DeserializeErr};
3
4#[derive(Deserialize, Serialize, Clone, Debug)]
5pub struct AdminCode {
6 pub country_code: String,
8 pub code: String,
9 pub name: String,
10 pub geo_name_id: i32,
12}
13
14impl AdminCode {
15 pub fn deserialize_from_string(str: &str) -> Result<Self, DeserializeErr> {
20 let vec = str.split(" ").collect::<Vec<&str>>();
21 let code = vec[0].split(".").collect::<Vec<&str>>();
22
23 Ok(Self {
24 country_code: code[0].to_owned(),
25 code: code[1].to_owned(),
26 name: vec[1].to_owned(),
27 geo_name_id: vec[3].parse::<i32>()?,
28 })
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use crate::model::AdminCode;
35
36 #[test]
37 fn deserialize_string_to_admin_code() {
38 use std::fs::File;
39 use std::io::{BufRead, BufReader};
40
41 for line in BufReader::new(File::open("./test-data/admin1CodesASCII.txt").unwrap()).lines() {
42 let _admin_code = AdminCode::deserialize_from_string(&line.unwrap()).unwrap();
43 }
44 }
45}