METAR parsing library for Rust

Quick usage

This simple usage will print out the parsed data from the METAR.

```rust extern crate metar;

fn main() { let metar = "EGHI 282120Z 19015KT 140V220 6000 RA SCT006 BKN009 16/14 Q1006"; let r = metar::Metar::parse(metar).unwrap(); println!("{:#?}", r); } ```

Issues?

METARs are complicated structures. If you come across a METAR that doesn't parse correctly, please open an issue and include the METAR. This will aid in debugging the issue significantly.

Definition of a METAR

A METAR can be defined with the following Backus-Naur Form description:

```bnf ::= ' ' ' ' ' ' ' ' ' ' ' '

::=

::= '' | 'AUTO'

::= 'Z' ::= | '3' ::= '0' | '1' | '2' ::= '0' | '1' ::= | '2' ::= '0' | '1' ::= '0' | '1' | '2' | '3' ::= ::= '0' | '1' | '2' | '3' | '4' | '5'

::= 'KT' | 'MPS' ::= | 'VRB' | '' ::= '' | 'G'

::= '' | 'V' ' '

::= | '3' ::= '0' | '1' | '2' ::= '0' | '1' | '2' | '3' | '4' | '5'

::= 'CAVOK' | ::= | 'SM' | 'M' | 'M' 'SM' ::= 'CLR' | 'SKC' | 'NCD' | 'NSC' | | ::= | ::= 'R' '/' ::= | '3' ::= '' | 'L' | 'C' | 'R' ::= 'P' | 'M' ::= 'D' | 'U' | 'N'

::= | ::= ::= 'FEW' | 'SCT' | 'BKN' | 'OVC' | '///' ::= | '///' ::= '' | 'CB' | 'TCU' | '///'

::= 'VV' ::= '///' |

::= '' | | ::= | | | ::= '' | '+' | '-' | 'VC' ::= '' | 'MI' | 'PR' | 'BC' | 'DR' | 'BL' | 'SH' | 'TS' | 'FZ' ::= 'RA' | 'DZ' | 'SN' | 'SG' | 'IC' | 'PL' | 'GR' | 'GS' | 'UP' ::= 'FG' | 'VA' | 'BR' | 'HZ' | 'DU' | 'FU' | 'SA' | 'PY' ::= 'SQ' | 'PO' | 'DS' | 'SS' | 'FC' ::= 'B' 'E' | 'B' | 'E' ::= |

::= '/' ::= 'M' |

::= 'Q' | 'A'

::= ' RMK' ...

::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' ```