1use serde::{Deserialize, Serialize};
2use wasm_bindgen::prelude::*;
3
4use thrust::data::field15::{Field15Element, Field15Parser};
5
6#[wasm_bindgen(js_name = parseField15)]
20pub fn parse_field15(route: &str) -> Result<JsValue, JsValue> {
21 let elements: Vec<Field15Element> = Field15Parser::parse(route);
22 serde_wasm_bindgen::to_value(&elements).map_err(|e| JsValue::from_str(&e.to_string()))
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct ResolvedPoint {
28 pub latitude: f64,
29 pub longitude: f64,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub name: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub kind: Option<String>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct RouteSegment {
39 pub start: ResolvedPoint,
40 pub end: ResolvedPoint,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub name: Option<String>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub segment_type: Option<String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub connector: Option<String>,
47}