Bläddra i källkod

Add options.parseFromMap

DarthSim 1 vecka sedan
förälder
incheckning
fa2641f876
2 ändrade filer med 19 tillägg och 14 borttagningar
  1. 1 14
      options/apply.go
  2. 18 0
      options/parse.go

+ 1 - 14
options/apply.go

@@ -3,7 +3,6 @@ package options
 import (
 	"fmt"
 	"log/slog"
-	"maps"
 	"slices"
 	"strconv"
 	"time"
@@ -74,19 +73,7 @@ func applySizeOption(o *Options, args []string) (err error) {
 }
 
 func applyResizingTypeOption(o *Options, args []string) error {
-	if err := ensureMaxArgs(keys.ResizingType, args, 1); err != nil {
-		return err
-	}
-
-	if r, ok := resizeTypes[args[0]]; ok {
-		o.Set(keys.ResizingType, r)
-	} else {
-		return newInvalidArgumentError(
-			keys.ResizingType, args[0], slices.Collect(maps.Keys(resizeTypes))...,
-		)
-	}
-
-	return nil
+	return parseFromMap(o, keys.ResizingType, resizeTypes, args...)
 }
 
 func applyResizeOption(o *Options, args []string) error {

+ 18 - 0
options/parse.go

@@ -4,6 +4,7 @@ import (
 	"encoding/base64"
 	"fmt"
 	"log/slog"
+	"maps"
 	"slices"
 	"strconv"
 	"strings"
@@ -198,6 +199,7 @@ func parseBase64String(o *Options, key string, args ...string) error {
 	return nil
 }
 
+// parseHexRGBColor parses a hex-encoded RGB color option value
 func parseHexRGBColor(o *Options, key string, args ...string) error {
 	if err := ensureMaxArgs(key, args, 1); err != nil {
 		return err
@@ -213,6 +215,22 @@ func parseHexRGBColor(o *Options, key string, args ...string) error {
 	return nil
 }
 
+// parseFromMap parses an option value from a map of allowed values
+func parseFromMap[T comparable](o *Options, key string, m map[string]T, args ...string) error {
+	if err := ensureMaxArgs(key, args, 1); err != nil {
+		return err
+	}
+
+	v, ok := m[args[0]]
+	if !ok {
+		return newInvalidArgumentError(key, args[0], slices.Collect(maps.Keys(m))...)
+	}
+
+	o.Set(key, v)
+
+	return nil
+}
+
 func parseGravityType(
 	o *Options,
 	key string,