// FILE: ./internal/normalizers/builtins.go package normalizers import ( fknormalize "gitea.maximumdirect.net/ejr/feedkit/processors/normalize" "gitea.maximumdirect.net/ejr/weatherfeeder/internal/normalizers/nws" "gitea.maximumdirect.net/ejr/weatherfeeder/internal/normalizers/openmeteo" "gitea.maximumdirect.net/ejr/weatherfeeder/internal/normalizers/openweather" ) var builtinRegistrations = []func([]fknormalize.Normalizer) []fknormalize.Normalizer{ nws.Register, openmeteo.Register, openweather.Register, } // RegisterBuiltins registers all normalizers shipped with this binary. // // This mirrors internal/sources.RegisterBuiltins, but note the selection model: // // - sources are built by name (cfg.Driver -> factory) // - normalizers are selected by Match() (event.Schema -> first match wins) // // Registration order matters because feedkit normalize.Processor is "first match wins". // In weatherfeeder we avoid ambiguity by matching strictly on schema constants, but // we still keep ordering stable as a best practice. func RegisterBuiltins(in []fknormalize.Normalizer) []fknormalize.Normalizer { out := in // Keep this intentionally boring: delegate registration to provider subpackages // so main.go stays clean and each provider owns its own mapping logic. // // Order here should be stable across releases to reduce surprises when adding // new normalizers. for _, register := range builtinRegistrations { out = register(out) } return out }