Skip to main content

thrust_wasm/
airac.rs

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}