90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
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...)
|
|
}
|