- Implement full NWS hourly forecast normalizer (raw.nws.hourly.forecast.v1 → weather.forecast.v1) - Add GeoJSON forecast types and helpers for NWS gridpoint hourly payloads - Normalize temperatures, winds, humidity, PoP, and infer WMO condition codes from forecast text/icons - Treat forecast IssuedAt as EffectiveAt for stable, dedupe-friendly event IDs - Introduce project-wide float rounding at normalization finalization - Round all float values in canonical payloads to 2 decimal places - Apply consistently across pointers, slices, maps, and nested structs - Preserve opaque structs (e.g., time.Time) unchanged - Add SchemaRawNWSHourlyForecastV1 and align schema matching/comments - Clean up NWS helper organization and comments - Update documentation to reflect numeric wire-format and normalization policies This establishes a complete, deterministic hourly forecast pipeline for NWS and improves JSON output stability across all canonical weather schemas.
20 lines
848 B
Go
20 lines
848 B
Go
// Package common contains cross-provider helper code used by weatherfeeder normalizers.
|
|
//
|
|
// Purpose
|
|
// -------
|
|
// Normalizers convert provider-specific RAW payloads into canonical internal/model types.
|
|
// Some small utilities are naturally reusable across multiple providers (unit conversions,
|
|
// payload extraction, common parsing, shared fallbacks). Those belong here.
|
|
//
|
|
// This package is intentionally "boring":
|
|
// - pure helpers (deterministic, no I/O)
|
|
// - minimal abstractions (prefer straightforward functions)
|
|
// - easy to unit test
|
|
//
|
|
// Numeric wire policy
|
|
// -------------------
|
|
// Canonical payloads are intended for sinks/serialization. To keep output stable and readable,
|
|
// weatherfeeder rounds floating-point values in canonical payloads to a small, fixed precision
|
|
// at finalization time (see round.go).
|
|
package common
|