Files
weatherfeeder/internal/normalizers/common/doc.go
Eric Rakestraw 2eb2d4b90f feat(nws, normalizers): add NWS hourly forecast normalization and enforce canonical float rounding
- 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.
2026-01-16 10:28:32 -06:00

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