refactor(normalizers): deduplicate synthetic station ID generation
- Add common SynthStationID helpers for coordinate-based providers - Use shared helper for Open-Meteo and OpenWeather station ID synthesis - Require both lat/lon when generating synthetic IDs to avoid misleading defaults - Remove unused Open-Meteo normalizer wrapper code This reduces cross-provider duplication while keeping provider-specific mapping logic explicit and readable.
This commit is contained in:
@@ -25,3 +25,26 @@ func ParseTime(s string) (time.Time, error) {
|
||||
|
||||
return time.Time{}, fmt.Errorf("unsupported NWS timestamp format: %q", s)
|
||||
}
|
||||
|
||||
// ParseTimeBestEffort parses an NWS timestamp and returns it in UTC.
|
||||
//
|
||||
// This is a convenience for normalizers that want "best effort" parsing:
|
||||
// invalid/empty strings do not fail the entire normalization; they return zero time.
|
||||
func ParseTimeBestEffort(s string) time.Time {
|
||||
t, err := ParseTime(s)
|
||||
if err != nil {
|
||||
return time.Time{}
|
||||
}
|
||||
return t.UTC()
|
||||
}
|
||||
|
||||
// ParseTimePtr parses an NWS timestamp and returns a UTC *time.Time.
|
||||
//
|
||||
// Empty/unparseable input returns nil. This is useful for optional CAP fields.
|
||||
func ParseTimePtr(s string) *time.Time {
|
||||
t := ParseTimeBestEffort(s)
|
||||
if t.IsZero() {
|
||||
return nil
|
||||
}
|
||||
return &t
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user