0.2.0-dev #2
109
flagzog/flags.go
Normal file
109
flagzog/flags.go
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
package flagzog
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/Oudwins/zog"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewBoolFlag(name string, schema *zog.BoolSchema[bool], usage string) BoolFlag {
|
||||||
|
return BoolFlag{
|
||||||
|
name: name,
|
||||||
|
schema: schema,
|
||||||
|
usage: usage,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type BoolFlag struct {
|
||||||
|
name string
|
||||||
|
schema *zog.BoolSchema[bool]
|
||||||
|
usage string
|
||||||
|
Value bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f BoolFlag) Name() string {
|
||||||
|
return f.name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f BoolFlag) Usage() string {
|
||||||
|
return f.usage
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f BoolFlag) Validate() ([]string, error) {
|
||||||
|
var messages []string
|
||||||
|
if issues := f.schema.Validate(&f.Value); issues != nil {
|
||||||
|
for _, issue := range issues {
|
||||||
|
messages = append(messages, issue.Message)
|
||||||
|
}
|
||||||
|
return messages, fmt.Errorf("validation failed for flag '%s' with value '%s'", f.Name(), f.Value)
|
||||||
|
}
|
||||||
|
return messages, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewInt64Flag(name string, schema *zog.NumberSchema[int64], usage string) Int64Flag {
|
||||||
|
return Int64Flag{
|
||||||
|
name: name,
|
||||||
|
schema: schema,
|
||||||
|
usage: usage,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Int64Flag struct {
|
||||||
|
name string
|
||||||
|
schema *zog.NumberSchema[int64]
|
||||||
|
usage string
|
||||||
|
Value int64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Int64Flag) Name() string {
|
||||||
|
return f.name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Int64Flag) Usage() string {
|
||||||
|
return f.usage
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Int64Flag) Validate() ([]string, error) {
|
||||||
|
var messages []string
|
||||||
|
if issues := f.schema.Validate(&f.Value); issues != nil {
|
||||||
|
for _, issue := range issues {
|
||||||
|
messages = append(messages, issue.Message)
|
||||||
|
}
|
||||||
|
return messages, fmt.Errorf("validation failed for flag '%s' with value '%s'", f.Name(), f.Value)
|
||||||
|
}
|
||||||
|
return messages, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStringFlag(name string, schema *zog.StringSchema[string], usage string) StringFlag {
|
||||||
|
return StringFlag{
|
||||||
|
name: name,
|
||||||
|
schema: schema,
|
||||||
|
usage: usage,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type StringFlag struct {
|
||||||
|
name string
|
||||||
|
schema *zog.StringSchema[string]
|
||||||
|
usage string
|
||||||
|
Value string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f StringFlag) Name() string {
|
||||||
|
return f.name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f StringFlag) Usage() string {
|
||||||
|
return f.usage
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f StringFlag) Validate() ([]string, error) {
|
||||||
|
var messages []string
|
||||||
|
if issues := f.schema.Validate(&f.Value); issues != nil {
|
||||||
|
for _, issue := range issues {
|
||||||
|
messages = append(messages, issue.Message)
|
||||||
|
}
|
||||||
|
return messages, fmt.Errorf("validation failed for flag '%s' with value '%s'", f.Name(), f.Value)
|
||||||
|
}
|
||||||
|
return messages, nil
|
||||||
|
}
|
27
flagzog/validator.go
Normal file
27
flagzog/validator.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package flagzog
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"log/slog"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FlagValidator interface {
|
||||||
|
Name() string
|
||||||
|
Validate() ([]string, error)
|
||||||
|
Usage() string
|
||||||
|
}
|
||||||
|
|
||||||
|
func ValidateFlags(ctx context.Context, logger *slog.Logger, flags []FlagValidator) ([]string, error) {
|
||||||
|
var validatedFlags []string
|
||||||
|
var err error
|
||||||
|
|
||||||
|
for _, flag := range flags {
|
||||||
|
var issues []string
|
||||||
|
if issues, err = flag.Validate(); err != nil {
|
||||||
|
logger.Log(ctx, slog.LevelError, "validation failed", slog.String("flag", flag.Name()), slog.Any("issues", issues))
|
||||||
|
return validatedFlags, err
|
||||||
|
}
|
||||||
|
validatedFlags = append(validatedFlags, flag.Name())
|
||||||
|
}
|
||||||
|
return validatedFlags, nil
|
||||||
|
}
|
Reference in New Issue
Block a user