metar 0.9.3

A fast METAR parsing library in pure Rust
Documentation
Feature: METAR Parsing
    METARs are current weather reports from the world of aviation.
    This library's purpose is to parse them, so we test that here.

    Scenario Outline: Parse a METAR
        When "<metar>" is parsed
        Then it parses successfully
        And the station is "<station>"
        And the date is <date> <hour> <minute>
        And the wind direction is <wind_dir>
        And the wind speed is <wind_spd>
        And the wind is varying between <wind_vryng>
        And the wind is gusting to <wind_gusts>
        And the visibility is <visibility>
        And the temperature is <temp>
        And the dewpoint is <dewp>
        And the pressure is <pressure>

        # Currently missing checks for:
        #  - kind of report
        #  - reduced direcitonal visibility
        #  - RVR
        #  - cloud situation and cloud layers
        #  - vertical visibility
        #  - weather
        #  - recent weather
        #  - windshear warnings
        #  - runway conditions
        #  - trends
        #  - clouds in the vicinity
        #  - remarks

        Examples:
            | station | date | hour | minute | wind_dir | wind_spd | wind_vryng | wind_gusts | visibility | temp | dewp | pressure   | metar                                                                                                                                     |
            | EGPC    | 24   | 19   | 50     | unknown  | unknown  | none       | none       | unknown    | unk  | unk  | unknown    | EGPC 241950Z AUTO /////KT //// ///////// ///// Q////                                                                                      |
            | EGHI    | 28   | 21   | 20     | 190      | 15 kt    | 140 220    | none       | 6000 m     | 16   | 14   | 1006 hPa   | EGHI 282120Z 19015KT 140V220 6000 RA SCT006 BKN009 16/14 Q1006                                                                            |
            | EGHI    | 06   | 20   | 50     | 310      | 6 kt     | 270 340    | none       | CAVOK      | 13   | 07   | 1017 hPa   | EGHI 062050Z 31006KT 270V340 CAVOK 13/07 Q1017                                                                                            |
            | EGHI    | 07   | 15   | 20     | 190      | 13 kt    | 160 220    | none       | 3000 m     | 15   | 14   | 1012 hPa   | EGHI 071520Z 19013KT 160V220 3000 -RADZ BR BKN006 15/14 Q1012                                                                             |
            | EGHI    | 07   | 17   | 50     | 210      | 10 kt    | none       | none       | 3500 m     | 16   | 15   | 1011 hPa   | EGHI 071750Z 21010KT 3500 -RADZ BR BKN004 16/15 Q1011                                                                                     |
            | EGHI    | 08   | 06   | 50     | variable | 3 kt     | none       | none       | CAVOK      | 12   | 10   | 1009 hPa   | EGHI 080650Z VRB03KT CAVOK 12/10 Q1009                                                                                                    |
            | EGHI    | 08   | 16   | 50     | 230      | 10 kt    | none       | none       | 9999 m     | 15   | 11   | 1006 hPa   | EGHI 081650Z 23010KT 9999 VCSH FEW018 FEW025TCU 15/11 Q1006                                                                               |
            | EGHI    | 11   | 07   | 50     | 220      | 17 kt    | 190 250    | 28 kt      | 6000 m     | 15   | 14   | 1008 hPa   | EGHI 110750Z 22017G28KT 190V250 6000 -RA FEW007 BKN010 15/14 Q1008 RERA                                                                   |
            | EGHI    | 13   | 19   | 50     | 060      | 1 kt     | none       | none       | 9999 m     | 9    | 8    | 1010 hPa   | EGHI 131950Z 06001KT 9999 MIFG NSC 09/08 Q1010                                                                                            |
            | EGHI    | 15   | 06   | 50     | 060      | 1 kt     | none       | none       | 500 m      | 11   | 10   | 1003 hPa   | EGHI 150650Z 06001KT 0500 R20/1000 FG VV/// 11/10 Q1003                                                                                   |
            | KEEN    | 06   | 13   | 56     | 0        | 0 kt     | none       | none       | 10 mi      | 6    | -3   | 30.29 inHg | KEEN 061356Z AUTO 00000KT 10SM CLR 06/M03 A3029 RMK AO2 SLP264 T00611028 $                                                                |
            | KLAX    | 06   | 18   | 53     | 260      | 7 kt     | none       | none       | 5 mi       | 19   | 13   | 30.00 inHg | KLAX 061853Z 26007KT 5SM BR SCT006 BKN013 19/13 A3000 RMK AO2 SLP158 T01890133 $                                                          |
            | EGGD    | 06   | 19   | 20     | 140      | 7 kt     | none       | none       | 9999 m     | 7    | 6    | 997 hPa    | EGGD 061920Z AUTO 14007KT 9999 SCT035/// //////CB 07/06 Q0997                                                                             |
            | EGSS    | 08   | 17   | 50     | 310      | 6 kt     | 280 360    | none       | 7000 m     | 6    | 5    | 1009 hPa   | EGSS 081750Z AUTO 31006KT 280V360 7000 -RA BKN007 BKN012 BKN019 06/05 Q1009                                                               |
            | KLAX    | 10   | 13   | 35     | 100      | 8 kt     | none       | none       | 0.25 mi    | 16   | 15   | 29.99 inHg | KLAX 101335Z 10008KT 1/4SM R25L/1800V3000FT FG VV001 16/15 A2999 RMK AO2 VIS 1/8V1/2 T01610150                                            |
            | KLAX    | 10   | 17   | 53     | variable | 4 kt     | none       | none       | 5 mi       | 19   | 14   | 30.02 inHg | KLAX 101753Z COR VRB04KT 5SM HZ FEW009 19/14 A3002 RMK AO2 SLP165 T01940139 10194 20156 51006                                             |
            | KLAX    | 04   | 18   | 28     | 20       | 4 kt     | none       | none       | 2.5 mi     | 14   | 12   | 29.96 inHg | KLAX 041828Z 02004KT 2 1/2SM -RA BR BKN007 OVC013 14/12 A2996 RMK AO2 VIS 1 1/2V3 P0002 T01390122 $                                       |
            | ESSA    | 08   | 19   | 50     | 220      | 21 kt    | none       | none       | 9999 m     | 6    | 3    | 973 hPa    | ESSA 081950Z 22021KT 9999 OVC025 06/03 Q0973 R01L/29//95 R08/29//95 R01R/29//95 NOSIG                                                     |
            | EDDK    | 06   | 19   | 50     | 280      | 8 kt     | none       | none       | CAVOK      | 18   | 10   | 1015 hPa   | EDDK 061950Z AUTO 28008KT CAVOK 18/10 Q1015 BECMG 20006KT                                                                                 |
            | EGPC    | 06   | 19   | 50     | 30       | 4 kt     | none       | none       | 9999 m     | 11   | 9    | 1017 hPa   | EGPC 061950Z AUTO 03004KT 9999 NCD 11/09 Q1017                                                                                            |
            | RJAA    | 06   | 19   | 30     | 310      | 10 kt    | none       | none       | 9999 m     | 16   | 16   | 993 hPa    | RJAA 061930Z AUTO 31010KT 9999 SCT002 OVC005 16/16 Q0993 TEMPO 3000 -RA BR RMK A2933                                                      |
            | UUDD    | 06   | 19   | 30     | 360      | 3 mps    | 330 030    | none       | CAVOK      | 16   | 8    | 1016 hPa   | UUDD 061930Z 36003MPS 330V030 CAVOK 16/08 Q1016 R32L/CLRD60 NOSIG                                                                         |
            | ZGSZ    | 06   | 19   | 00     | 130      | 5 mps    | none       | none       | 9999 m     | 26   | 25   | 1002 hPa   | ZGSZ 061900Z 13005MPS 9999 -TSRA FEW015 FEW026CB BKN030 26/25 Q1002 RESHRA BECMG AT1920 -SHRA BECMG AT1950 21005MPS 2500 +TSRA            |
            | RJAA    | 07   | 09   | 00     | 30       | 10 kt    | 350 050    | none       | 9999 m     | 16   | 14   | 1004 hPa   | RJAA 070900Z 03010KT 350V050 9999 -SHRA FEW010 BKN017 16/14 Q1004 WS R34L NOSIG RMK 1CU010 7CU017 A2967                                   |
            | RJAA    | 07   | 10   | 00     | 20       | 8 kt     | none       | none       | 9999 m     | 16   | 14   | 1006 hPa   | RJAA 071000Z 02008KT 9999 -SHRA FEW010 BKN016 16/14 Q1006 TEMPO FEW008 BKN012 RMK 1CU010 7CU016 A2971                                     |
            | EGGD    | 07   | 13   | 20     | 190      | 9 kt     | none       | none       | 9999 m     | 17   | 15   | 1011 hPa   | EGGD 071320Z 19009KT 9999 4500NW -SHRA FEW015TCU SCT020 BKN040 17/15 Q1011                                                                |
            | KLAX    | 13   | 12   | 53     | 80       | 5 kt     | none       | none       | 2 mi       | 18   | 17   | 29.86 inHg | KLAX 131253Z 08005KT 2SM -DZ BR FEW005 OVC008 18/17 A2986 RMK AO2 SLP108 VIS N-NE 1 1/4 VIS S 2 1/2 DZB10 P0000 T01780167 $               |
            | EDDK    | 15   | 08   | 50     | variable | 3 kt     | none       | none       | 9999 m     | 23   | 11   | 1018 hPa   | EDDK 150850Z AUTO VRB03KT 9999 R24/1000U NCD 23/11 Q1018                                                                                  |
            | RJAA    | 17   | 15   | 37     | 160      | 2 kt     | none       | none       | 3700 m     | 19   | 19   | 1010 hPa   | RJAA 171537Z AUTO 16002KT 3700 BR NCD 19/19 Q1010 RMK A2984                                                                               |
            | RJAA    | 24   | 09   | 00     | 220      | 13 kt    | 180 260    | 26 kt      | 9999 m     | 28   | 23   | 1003 hPa   | RJAA 240900Z 22013G26KT 180V260 9999 FEW020 BKN/// 28/23 Q1003 WS R16R WS R16L NOSIG RMK 1CU020 A2962                                     |
            | EDDK    | 24   | 08   | 50     | 240      | 8 kt     | 220 280    | none       | 9000 m     | 18   | 17   | 1008 hPa   | EDDK 240850Z AUTO 24008KT 220V280 9000 SHRA BKN009 FEW///TCU 18/17 Q1008 BECMG NSW SCT015 BKN030                                          |
            | UUDD    | 27   | 09   | 00     | 310      | 5 mps    | 260 350    | none       | CAVOK      | 31   | 15   | 1020 hPa   | UUDD 270900Z 31005MPS 260V350 CAVOK 31/15 Q1020 R88/CLRD60 NOSIG                                                                          |
            | KLAX    | 28   | 12   | 53     | 240      | 5 kt     | none       | none       | 0.125 mi   | 17   | 16   | 29.99 inHg | KLAX 281253Z 24005KT 1/8SM R25L/2600VP6000FT FG VV002 17/16 A2999 RMK AO2 SLP152 VIS E 1/4 T01720161                                      |
            | UUDD    | 15   | 12   | 30     | 260      | 7 mps    | none       | none       | CAVOK      | 23   | 09   | 1008 hPa   | UUDD 151230Z 26007MPS CAVOK 23/09 Q1008 WS R32L R32L/CLRD60 NOSIG                                                                         |
            | KLAX    | 28   | 12   | 53     | 240      | 5 kt     | none       | none       | 0.125 mi   | 17   | 16   | 29.99 inHg | KLAX 281253Z 24005KT 1/8SM R25L/2600VP6000FT FG VV002 17/16 A2999 RMK AO2 SLP152 VIS E 1/4 T01720161                                      |
            | KMHT    | 02   | 18   | 53     | 050      | 6 kt     | none       | none       | 10 mi      | 33   | 13   | 29.81 inHg | KMHT 021853Z COR 05006KT 10SM TS SCT075CB BKN150 33/13 A2981 RMK                                                                          |
            | KPVG    | 18   | 19   | 56     | unknown  | unknown  | none       | none       | 10 mi      | unk  | unk  | 29.82 inHg | KPVG 181956Z AUTO 10SM FEW030 SCT035 BKN050 A2982 RMK AO2 SLPNO FZRANO PNO $                                                              |
            | KPVG    | 18   | 18   | 55     | unknown  | unknown  | none       | none       | 10 mi      | unk  | unk  | 29.83 inHg | KPVG 181855Z 10SM FEW025 OVC034 A2983 RMK AO2 PWINO PNO FZRANO RVRNO                                                                      |
            | KGWW    | 19   | 11   | 50     | 000      | 0 kt     | none       | none       | unknown    | 14   | 14   | 30.07 inHg | KGWW 191150Z AUTO 00000KT 14/14 A3007 RMK AO2 70001 T01410140 10145 20122                                                                 |
            | CYWG    | 19   | 05   | 00     | 160      | 14 kt    | none       | none       | 10 mi      | 19   | 11   | 29.59 inHg | CYWG 190500Z 16014KT 10SM SKC 19/11 A2959 RMK SLP022 DENSITY ALT 1800FT                                                                   |
            | CYWG    | 19   | 04   | 00     | 150      | 11 kt    | none       | none       | 9 mi       | 18   | 12   | 29.60 inHg | CYWG 190400Z 15011KT 9SM SKC 18/12 A2960 RMK SLP027 DENSITY ALT 1700FT                                                                    |
            | KFCI    | 20   | 03   | 56     | 000      | 0 kt     | none       | none       | unknown    | 15   | 15   | unknown    | KFCI 200356Z AUTO 00000KT SCT070 15/15 RMK AO2 SLPNO T01500150 402610111 PWINO $                                                          |
            | KFCI    | 20   | 02   | 56     | 000      | 0 kt     | none       | none       | unknown    | 16   | 16   | unknown    | KFCI 200256Z AUTO 00000KT BKN070 16/16 RMK AO2 SLPNO T01610156 PWINO $                                                                    |
            | KPHF    | 19   | 10   | 54     | 000      | 0 kt     | none       | none       | 5 mi       | 11   | 11   | 30.03 inHg | KPHF 191054Z 00000KT 5SM BR CLR 11/11 A3003 RMK AO2 SLP168 T01110111                                                                      |
            | MDSD    | 19   | 20   | 00     | 080      | 8 kt     | none       | none       | 9999 m     | 32   | 25   | 1012 hPa   | MDSD 192000Z 08008KT 9999 FEW020CB FEW022 BKN300 32/25 Q1012 CB/NE/E/W                                                                    |
            | K2R2    | 22   | 10   | 55     | 020      | 3 kt     | none       | none       | 9 mi       | 10   | 10   | 30.30 inHg | K2R2 221055Z AUTO 02003KT 9SM CLR 10/10 A3030 RMK AO2 T01030103 $                                                                         |
            | HRYR    | 22   | 05   | 30     | unknown  | unknown  | unk unk    | none       | 5000 m     | 18   | 17   | 1022 hPa   | HRYR 220530Z /////KT ///V/// 5000 SCT005 BKN015 18/17 Q1022 NOSIG                                                                         |
            | ETHB    | 11   | 23   | 50     | 270      | 4 kt     | none       | none       | 3500 m     | 2    | 1    | 1031 hPa   | ETHB 112350Z 27004KT 3500 -DZ BR OVC007 02/01 Q1031 YLO                                                                                   |
            | LSZL    | 11   | 23   | 50     | 000      | 0 kt     | none       | none       | unknown    | -2   | -2   | 1027 hPa   | METAR LSZL 112350Z AUTO 00000KT 9999NDV NCD M02/M02 Q1027                                                                                 |
            | ESUT    | 11   | 23   | 50     | 310      | 15 kt    | none       | 26 kt      | unknown    | -4   | -6   | 1022 hPa   | ESUT 112350Z AUTO 31015G26KT //// R33///// // BKN022/// OVC031/// M04/M06 Q1022                                                           |
            | LTFJ    | 11   | 23   | 50     | 100      | 3 kt     | 070 160    | none       | 3200 m     | 8    | 7    | 1022 hPa   | LTFJ 112350Z 10003KT 070V160 3200 0500NE R06L/P1500N R24R/0600D R06R/P1500D R24L/0900N BCFG FEW001 BKN030 08/07 Q1022 TEMPO 0500 FG VV001 |
            | LTBD    | 11   | 23   | 50     | 000      | 0 kt     | none       | none       | 1200 m     | 7    | 7    | 1022 hPa   | LTBD 112350Z 00000KT 1200 R09/0500N R27////// BCFG NSC 07/07 Q1022                                                                        |
            | LFSB    | 12   | 00   | 00     | 350      | 7 kt     | none       | none       | 7000 m     | 2    | 2    | 1029 hPa   | LFSB 120000Z AUTO 35007KT 7000 FEW005 OVC023 02/02 Q1029 TEMPO 0300 FG VV///                                                              |
            | EDDK    | 27   | 14   | 20     | 160      | 8 kt     | none       | none       | 8000 m     | 5    | 3    | 1020 hPa   | EDDK 271420Z AUTO 16008KT 8000 -RADZ FEW006 OVC018 05/03 Q1020 TEMPO 4000 RADZ BKN012                                                     |
            | EHAM    | 12   | 20   | 25     | 350      | 5 kt     | 310 040    | none       | 4000 m     | 15   | 14   | 1029 hPa   | METAR EHAM 122025Z 35005KT 310V040 4000 DZ FEW003 SCT004 BKN006 15/14 Q1029 BECMG 6000=                                                   |
            | KLAX    | 16   | 12   | 53     | 080      | 3 kt     | none       | none       | 0.0625 mi  | 12   | 12   | 30.07 inHg | KLAX 161253Z 08003KT 1/16SM R25L/0800V1000FT FG VV001 12/12 A3007 RMK AO2 SLP179 T01170117                                                |
            #| UUDD    | 25   | 08   | 30     | 030      | 4 mps    | 350 150    | none       | CAVOK      | 25   | 11   | 1019 hPa   | UUDD 250830Z 03004MPS 350V150 CAVOK 25/11 Q1019 R88/60D NOSIG                                                                  |
            #| EDDK    | 07   | 13   | 50     | 250      | 4 kt     | 220 280    | none       | 9999 m     | 17   | 14   | 1013 hPa   | EDDK 071350Z AUTO 25004KT 220V280 9999 3100 SHRA BKN036 BKN046 SCT///TCU 17/14 Q1013 BECMG NSW                                 |
            #| UUDD    | 29   | 10   | 00     | 120      | 2 mps    | none       | none       | CAVOK      | 22   | 4    | 1022 hPa   | UUDD 291000Z 12002MPS CAVOK 22/04 Q1022 R88/60D NOSIG                                                                          |

    Scenario Outline: Parsing broken METARs fails, but does not panic
        When "<metar>" is parsed
        Then it cleanly fails

        Examples:
        | metar                                                         |
        | EGHI 282120Z 19015KT 140V220 6000 RA SCT006 BKN009 16/14 1006 |
        | EGHI 282120Z 19015KT 140V220 6000 RA SCT006 BKN009 16/14 Q10  |
        | EGPC 211650Z 33026G37KT 9999 FEW021 12/7 Q1026                |
        | EGPC 211650Z 33026G37KT 9999 FEW021 1/70 Q1026                |
        | EGPC 211650Z 33026G37KT 1 FEW021 12/7 Q1026                   |
        | EGPC 211650Z 33026G37KT 100SM FEW021 1/70 Q1026               |
        | EGPC 211650Z 3026KT 9999 FEW021 12/7 Q1026                    |