nws: refactored the NWS source files to relocate normalization logic to internal/normalizers.
This commit is contained in:
51
internal/normalizers/nws/metar.go
Normal file
51
internal/normalizers/nws/metar.go
Normal file
@@ -0,0 +1,51 @@
|
||||
// FILE: ./internal/normalizers/nws/metar.go
|
||||
package nws
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// metarPhenomenon is a typed view of NWS presentWeather objects.
|
||||
type metarPhenomenon struct {
|
||||
Intensity *string `json:"intensity"` // "light", "heavy", or null
|
||||
Modifier *string `json:"modifier"` // "freezing", "showers", etc., or null
|
||||
Weather string `json:"weather"` // e.g. "rain", "snow", "fog_mist", ...
|
||||
RawString string `json:"rawString"`
|
||||
InVicinity *bool `json:"inVicinity"`
|
||||
}
|
||||
|
||||
func decodeMetarPhenomena(raw []map[string]any) []metarPhenomenon {
|
||||
if len(raw) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
out := make([]metarPhenomenon, 0, len(raw))
|
||||
for _, m := range raw {
|
||||
b, err := json.Marshal(m)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
var p metarPhenomenon
|
||||
if err := json.Unmarshal(b, &p); err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
p.Weather = strings.ToLower(strings.TrimSpace(p.Weather))
|
||||
p.RawString = strings.TrimSpace(p.RawString)
|
||||
out = append(out, p)
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func containsWeather(phenomena []metarPhenomenon, weather string) bool {
|
||||
weather = strings.ToLower(strings.TrimSpace(weather))
|
||||
for _, p := range phenomena {
|
||||
if p.Weather == weather {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user