Files
feedkit/pipeline/pipeline.go
Eric Rakestraw 96039f6530 refactor!: introduce generic processors registry and remove normalize registry adapter
- add new `processors` package with canonical `Processor` interface
- add `processors.Registry` with Register/Build/BuildChain factory model
- switch `pipeline.Pipeline` to `[]processors.Processor`
- replace `normalize.Registry` + registry adapter with direct `normalize.Processor`
- remove `normalize/registry.go`
- update root docs to position normalize as one optional processing stage
- add tests for processors registry, normalize processor behavior, and pipeline flow

BREAKING CHANGE:
- `pipeline.Processor` removed; use `processors.Processor`
- `normalize.Registry` and old normalize processor adapter APIs removed
- downstream daemons must update processor wiring to new `processors.Registry`
  and `normalize.NewProcessor(...)`
2026-03-16 13:14:24 -05:00

40 lines
742 B
Go

package pipeline
import (
"context"
"fmt"
"gitea.maximumdirect.net/ejr/feedkit/event"
"gitea.maximumdirect.net/ejr/feedkit/processors"
)
type Pipeline struct {
Processors []processors.Processor
}
func (p *Pipeline) Process(ctx context.Context, e event.Event) (*event.Event, error) {
if err := e.Validate(); err != nil {
return nil, fmt.Errorf("pipeline: invalid input event: %w", err)
}
cur := &e
for _, proc := range p.Processors {
out, err := proc.Process(ctx, *cur)
if err != nil {
return nil, err
}
if out == nil {
// Dropped by policy.
return nil, nil
}
cur = out
}
if err := cur.Validate(); err != nil {
return nil, fmt.Errorf("pipeline: invalid output event: %w", err)
}
return cur, nil
}