1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
use df_st_core::{Coordinate, Path}; use regex::Regex; use serde::{Deserialize, Deserializer}; pub fn coordinates_deserializer<'de, D: Deserializer<'de>>( deserializer: D, ) -> Result<Option<Vec<Coordinate>>, D::Error> { let coords: String = Deserialize::deserialize(deserializer)?; if coords.is_empty() { return Ok(None); } let coords_list = coordinates_list(coords); Ok(Some(coords_list)) } fn coordinates_list(coords: String) -> Vec<Coordinate> { let re = Regex::new(r"(-?[0-9]+),(-?[0-9]+)\|").unwrap(); let mut coords_list = Vec::new(); for values in re.captures_iter(&coords) { coords_list.push(Coordinate { x: values[1].parse::<i32>().unwrap(), y: values[2].parse::<i32>().unwrap(), ..Default::default() }) } coords_list } pub fn coordinate_deserializer<'de, D: Deserializer<'de>>( deserializer: D, ) -> Result<Option<Coordinate>, D::Error> { let coords: String = Deserialize::deserialize(deserializer)?; if coords.is_empty() { return Ok(None); } let re = Regex::new(r"(-?[0-9]+),(-?[0-9]+)").unwrap(); let values = re.captures(&coords).unwrap(); let coords_result = Coordinate { x: values[1].parse::<i32>().unwrap(), y: values[2].parse::<i32>().unwrap(), ..Default::default() }; Ok(Some(coords_result)) } pub fn path_deserializer<'de, D: Deserializer<'de>>( deserializer: D, ) -> Result<Option<Vec<Path>>, D::Error> { let path: String = Deserialize::deserialize(deserializer)?; if path.is_empty() { return Ok(None); } let re = Regex::new(r"(-?[0-9]+),(-?[0-9]+),(-?[0-9]+),(-?[0-9]+),(-?[0-9]+)\|").unwrap(); let mut path_list = Vec::new(); for values in re.captures_iter(&path) { path_list.push(Path { x: values[1].parse::<i32>().unwrap(), y: values[2].parse::<i32>().unwrap(), flow: values[3].parse::<i32>().unwrap(), exit_tile: values[4].parse::<i32>().unwrap(), elevation: values[5].parse::<i32>().unwrap(), ..Default::default() }) } Ok(Some(path_list)) }