0.2.0-dev #2

Merged
jantytgat merged 9 commits from 0.2.0-dev into main 2025-06-09 20:38:21 +00:00
9 changed files with 181 additions and 55 deletions
Showing only changes of commit a1f8453097 - Show all commits

109
flagzog/flags.go Normal file
View 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
View 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
}