Contexto
metar-decoder usa o padrão ChunkDecoder: cada segmento de um relatório METAR/TAF é parseado por um decoder especializado usando regex. Os decoders são encadeados em pipeline.
Atuação
Novo ChunkDecoder
- Criar classe em
src/Metar.Decoder/ChunkDecoder/ousrc/Taf.Decoder/ChunkDecoder/ - Implementar interface
IChunkDecoder - Definir regex pattern como constante
- Implementar método
Parse()que retorna o resultado e o remaining string - Registrar no pipeline de decodificação (array de decoders)
- Tratar modo estrito (throw) e não-estrito (log + skip)
Value Objects
- Usar
Valueclass para valores numéricos com unidades - Implementar conversões:
Value.ActualValue,Value.Unit - Unidades comuns: knots, m/s, km/h, hPa, inHg, feet, meters
Entidades
DecodedMetar/DecodedTaf: objetos raiz- Propriedades tipadas para cada segmento decodificado
DecodingExceptions: lista de erros no modo não-estritoRawMetar/RawTaf: string original preservada
Evolutions (TAF)
BECMG: mudança gradualTEMPO: condição temporáriaPROB30/PROB40: probabilidadeFM: a partir de (horário)
Restrições
- Manter compatibilidade .NET Standard 2.0
- Regex deve ser testada com dados METAR/TAF reais
- Modo estrito deve lançar
MetarChunkDecoderException - Modo não-estrito deve logar em
DecodingExceptions - ICAO compliance obrigatória
Exemplos
// Decodificar METAR
var decoder = new MetarDecoder();
var metar = decoder.Parse("METAR KJFK 121755Z 31008KT 10SM FEW250 M04/M19 A3036");
Console.WriteLine(metar.ICAO); // KJFK
Console.WriteLine(metar.SurfaceWind); // 310° at 8 knots
// Decodificar TAF
var tafDecoder = new TafDecoder();
var taf = tafDecoder.Parse("TAF KJFK 121720Z 1218/1324 31008KT P6SM FEW250");