1use serde::Serialize;
2use wasm_bindgen::prelude::*;
3
4use thrust::data::airac::{
5 airac_code_from_date as rs_airac_code_from_date, airac_interval as rs_airac_interval,
6 effective_date_from_airac_code as rs_effective_date_from_airac_code,
7};
8
9#[derive(Clone, Debug, Serialize)]
10struct AiracIntervalRecord {
11 begin: String,
12 end: String,
13}
14
15#[wasm_bindgen]
16pub fn airac_code_from_date(date: String) -> Result<String, JsValue> {
17 let parsed = chrono::NaiveDate::parse_from_str(&date, "%Y-%m-%d")
18 .map_err(|e| JsValue::from_str(&format!("invalid date '{date}': {e}")))?;
19 Ok(rs_airac_code_from_date(parsed))
20}
21
22#[wasm_bindgen]
23pub fn effective_date_from_airac_code(airac_code: String) -> Result<String, JsValue> {
24 let date = rs_effective_date_from_airac_code(&airac_code).map_err(|e| JsValue::from_str(&e.to_string()))?;
25 Ok(date.format("%Y-%m-%d").to_string())
26}
27
28#[wasm_bindgen]
29pub fn airac_interval(airac_code: String) -> Result<JsValue, JsValue> {
30 let (begin, end) = rs_airac_interval(&airac_code).map_err(|e| JsValue::from_str(&e.to_string()))?;
31 let payload = AiracIntervalRecord {
32 begin: begin.format("%Y-%m-%d").to_string(),
33 end: end.format("%Y-%m-%d").to_string(),
34 };
35 serde_wasm_bindgen::to_value(&payload).map_err(|e| JsValue::from_str(&e.to_string()))
36}