Refactor validators into package-owned components
This commit is contained in:
55
internal/validators/metadata/metadata.go
Normal file
55
internal/validators/metadata/metadata.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package metadata
|
||||
|
||||
import "gitea.maximumdirect.net/eric/audita/internal/framework/contracts"
|
||||
|
||||
type ExecutionClass string
|
||||
|
||||
const (
|
||||
ExecutionClassDeterministic ExecutionClass = "deterministic"
|
||||
ExecutionClassLLMBacked ExecutionClass = "llm_backed"
|
||||
)
|
||||
|
||||
type ClassifiedValidator interface {
|
||||
contracts.Validator
|
||||
ExecutionClass() ExecutionClass
|
||||
}
|
||||
|
||||
func ClassOf(v contracts.Validator) ExecutionClass {
|
||||
if v == nil {
|
||||
return ExecutionClassDeterministic
|
||||
}
|
||||
classified, ok := v.(ClassifiedValidator)
|
||||
if !ok {
|
||||
return ExecutionClassDeterministic
|
||||
}
|
||||
switch classified.ExecutionClass() {
|
||||
case ExecutionClassLLMBacked:
|
||||
return ExecutionClassLLMBacked
|
||||
case ExecutionClassDeterministic:
|
||||
return ExecutionClassDeterministic
|
||||
default:
|
||||
return ExecutionClassDeterministic
|
||||
}
|
||||
}
|
||||
|
||||
func Wrap(v contracts.Validator, class ExecutionClass) contracts.Validator {
|
||||
if v == nil {
|
||||
return nil
|
||||
}
|
||||
if class != ExecutionClassLLMBacked {
|
||||
class = ExecutionClassDeterministic
|
||||
}
|
||||
return wrappedValidator{
|
||||
Validator: v,
|
||||
class: class,
|
||||
}
|
||||
}
|
||||
|
||||
type wrappedValidator struct {
|
||||
contracts.Validator
|
||||
class ExecutionClass
|
||||
}
|
||||
|
||||
func (w wrappedValidator) ExecutionClass() ExecutionClass {
|
||||
return w.class
|
||||
}
|
||||
30
internal/validators/metadata/metadata_test.go
Normal file
30
internal/validators/metadata/metadata_test.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package metadata
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"gitea.maximumdirect.net/eric/audita/internal/framework/contracts"
|
||||
frameworkvalidators "gitea.maximumdirect.net/eric/audita/internal/framework/validators"
|
||||
)
|
||||
|
||||
type unclassifiedValidator struct{}
|
||||
|
||||
func (u unclassifiedValidator) Name() string { return "unclassified" }
|
||||
|
||||
func (u unclassifiedValidator) Validate(_ context.Context, _ contracts.ValidationRequest) (frameworkvalidators.Result, error) {
|
||||
return frameworkvalidators.Result{ValidatorName: u.Name(), Decisions: nil}, nil
|
||||
}
|
||||
|
||||
func TestClassOfDefaultsToDeterministic(t *testing.T) {
|
||||
if got := ClassOf(unclassifiedValidator{}); got != ExecutionClassDeterministic {
|
||||
t.Fatalf("expected deterministic default class, got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWrapExposesExecutionClass(t *testing.T) {
|
||||
wrapped := Wrap(unclassifiedValidator{}, ExecutionClassLLMBacked)
|
||||
if got := ClassOf(wrapped); got != ExecutionClassLLMBacked {
|
||||
t.Fatalf("expected llm_backed class, got %q", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user