json_sift_parser 0.1.0

JSON-Sift is my first parser. It processes aviation weather data (METAR) used in civil flights, decoding abbreviations and transforming raw API data into structured CSV format for easier analysis.
Documentation
// src/metar_grammar.pest

WHITESPACE = _{ " " }

// --- Компоненти METAR ---
metar_keyword = { "METAR" }
station = { ('A'..'Z'){4} }
time = { ('0'..'9'){6} ~ "Z" }

wind_dir = { ('0'..'9'){3} }
wind_speed = { ('0'..'9'){2,3} }
wind_gust = { "G" ~ ('0'..'9'){2,3} }
wind_units = { "KT" | "MPS" }
wind = { wind_dir ~ wind_speed ~ wind_gust? ~ wind_units }

vis_num = { ('0'..'9')+ }
vis_frac = { vis_num ~ " " ~ vis_num ~ "/" ~ vis_num }
visibility = { ("M" | "P")? ~ (vis_num | vis_frac) ~ "SM" | "10SM" } // Підтримка "10SM"

cloud_cover = { "SCT" | "BKN" | "FEW" | "OVC" }
cloud_alt = { ('0'..'9'){3} }
clouds = { (cloud_cover ~ cloud_alt) | "CLR" | "SKC" }

temp = { "M"? ~ ('0'..'9'){2} }
dewpoint = { "M"? ~ ('0'..'9'){2} }
temp_dew = { temp ~ "/" ~ dewpoint }

pressure = { "A" ~ ('0'..'9'){4} }

remarks = { "RMK" ~ (!EOI ~ ANY)* }

// --- Головне правило ---
metar_report = {
    SOI ~
    metar_keyword? ~ 
    station ~
    time ~
    wind ~
    visibility ~
    clouds* ~ 
    temp_dew ~
    pressure ~
    remarks? ~
    EOI
}