package noop import ( "context" "encoding/json" "fmt" "gitea.maximumdirect.net/eric/notarius/internal/core/artifacts" "gitea.maximumdirect.net/eric/notarius/internal/core/source" "gitea.maximumdirect.net/eric/notarius/internal/framework/contracts" "gitea.maximumdirect.net/eric/notarius/internal/framework/pipeline" ) const Key = "noop" var _ contracts.Normalizer = (*Normalizer)(nil) type Normalizer struct{} func New() *Normalizer { return &Normalizer{} } func (n *Normalizer) Key() string { return Key } func (n *Normalizer) Normalize(ctx context.Context, req contracts.NormalizeRequest) (contracts.NormalizeResult, error) { if n == nil { return contracts.NormalizeResult{}, normalizerErrorf("normalizer must not be nil") } if ctx == nil { return contracts.NormalizeResult{}, normalizerErrorf("context must not be nil") } if err := ctx.Err(); err != nil { return contracts.NormalizeResult{}, normalizerErrorf("context error before normalize: %w", err) } return contracts.NormalizeResult{Candidates: cloneCandidates(req.Candidates)}, nil } func ModuleSpec() pipeline.ModuleSpec { return pipeline.ModuleSpec{ Key: Key, Stage: pipeline.StageNormalize, Requires: []string{"merged"}, Provides: []string{"normalized"}, } } func Register(registry *pipeline.NormalizerRegistry) error { return registry.RegisterWithSpec(ModuleSpec(), func() (contracts.Normalizer, error) { return New(), nil }) } func cloneCandidates(candidates []artifacts.ArtifactCandidate) []artifacts.ArtifactCandidate { if len(candidates) == 0 { return nil } out := make([]artifacts.ArtifactCandidate, 0, len(candidates)) for _, candidate := range candidates { out = append(out, artifacts.ArtifactCandidate{ Index: candidate.Index, ExtractorKey: candidate.ExtractorKey, ArtifactType: candidate.ArtifactType, SchemaVersion: candidate.SchemaVersion, Payload: append(json.RawMessage(nil), candidate.Payload...), SourceRefs: append([]source.SourceRef(nil), candidate.SourceRefs...), Metadata: cloneMetadata(candidate.Metadata), }) } return out } func cloneMetadata(metadata map[string]any) map[string]any { if len(metadata) == 0 { return nil } out := make(map[string]any, len(metadata)) for key, value := range metadata { out[key] = value } return out } func normalizerErrorf(format string, args ...any) error { return fmt.Errorf("noop normalizer: "+format, args...) }