feat!: rework the public API to json/v2-style variadic options
Test / test (push) Successful in 1m49s
Test / test (push) Successful in 1m49s
Assisted-by: GLM 5.3 Flash
This commit is contained in:
+20
-21
@@ -54,7 +54,7 @@ func TestTargetedStrictFindings(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
err := NewDecoder().DisallowUnknownFields().Decode([]byte(tt.doc), &cfg)
|
||||
err := Unmarshal([]byte(tt.doc), &cfg, RejectUnknownFields(true))
|
||||
if err == nil {
|
||||
t.Fatalf("no error, want %q", tt.want)
|
||||
}
|
||||
@@ -102,7 +102,7 @@ func TestTargetedParseErrors(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
err := NewDecoder().Decode([]byte(tt.doc), &cfg)
|
||||
err := Unmarshal([]byte(tt.doc), &cfg)
|
||||
if err == nil {
|
||||
t.Fatalf("no error, want %q", tt.want)
|
||||
}
|
||||
@@ -121,7 +121,7 @@ func TestTargetedSilentShapes(t *testing.T) {
|
||||
// sink's own x is a different key, the tree's shape exactly.
|
||||
var cfg, ref targetCfg
|
||||
in := []byte("[tab]\nx = 1\n[tab.nested]\n")
|
||||
if err := NewDecoder().Decode(in, &cfg); err != nil {
|
||||
if err := Unmarshal(in, &cfg); err != nil {
|
||||
t.Fatalf("decode: %v", err)
|
||||
}
|
||||
if err := treeDecodeInto(in, &ref); err != nil {
|
||||
@@ -137,7 +137,7 @@ func TestTargetedSilentShapes(t *testing.T) {
|
||||
t.Run("unknown keys are ignored without strict", func(t *testing.T) {
|
||||
var cfg, ref targetCfg
|
||||
in := []byte("num = 5\nz1 = 1\n[zz]\nk = 1\n")
|
||||
if err := NewDecoder().Decode(in, &cfg); err != nil {
|
||||
if err := Unmarshal(in, &cfg); err != nil {
|
||||
t.Fatalf("decode: %v", err)
|
||||
}
|
||||
if err := treeDecodeInto(in, &ref); err != nil {
|
||||
@@ -153,7 +153,7 @@ func TestTargetedSilentShapes(t *testing.T) {
|
||||
t.Run("an inline table into a map field", func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
in := []byte("lims = { cpu = 4, deep = { a = true } }\n")
|
||||
if err := NewDecoder().Decode(in, &cfg); err != nil {
|
||||
if err := Unmarshal(in, &cfg); err != nil {
|
||||
t.Fatalf("decode: %v", err)
|
||||
}
|
||||
if cfg.Lims["cpu"] != int64(4) {
|
||||
@@ -162,7 +162,7 @@ func TestTargetedSilentShapes(t *testing.T) {
|
||||
})
|
||||
t.Run("an overflow falls back to the decode error", func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
err := NewDecoder().Decode([]byte("small = 300\n"), &cfg)
|
||||
err := Unmarshal([]byte("small = 300\n"), &cfg)
|
||||
want := "interpres: small: integer 300 overflows uint8"
|
||||
if err == nil || err.Error() != want {
|
||||
t.Errorf("err = %v, want %q", err, want)
|
||||
@@ -185,7 +185,7 @@ func TestTargetedSilentShapes(t *testing.T) {
|
||||
var cfg struct {
|
||||
Rate Number `toml:"rate"`
|
||||
}
|
||||
if err := NewDecoder().UseNumber().Decode([]byte("rate = 1_000\n"), &cfg); err != nil {
|
||||
if err := Unmarshal([]byte("rate = 1_000\n"), &cfg, NumbersAsLiterals(true)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cfg.Rate != "1_000" {
|
||||
@@ -195,7 +195,7 @@ func TestTargetedSilentShapes(t *testing.T) {
|
||||
t.Run("dotted keys fill a map field", func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
in := []byte("lims.a.b = true\nlims.c = 3\n")
|
||||
if err := NewDecoder().Decode(in, &cfg); err != nil {
|
||||
if err := Unmarshal(in, &cfg); err != nil {
|
||||
t.Fatalf("decode: %v", err)
|
||||
}
|
||||
if cfg.Lims["c"] != int64(3) {
|
||||
@@ -205,7 +205,7 @@ func TestTargetedSilentShapes(t *testing.T) {
|
||||
t.Run("an inline table cannot be extended", func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
in := []byte("lims = { a = 1 }\n[lims.deep]\nb = 2\n")
|
||||
err := NewDecoder().Decode(in, &cfg)
|
||||
err := Unmarshal(in, &cfg)
|
||||
if err == nil || !strings.Contains(err.Error(), "cannot extend inline table") {
|
||||
t.Errorf("err = %v, want the inline-table extension error", err)
|
||||
}
|
||||
@@ -233,8 +233,7 @@ func TestTargetedShapesMatrix(t *testing.T) {
|
||||
for i, doc := range docs {
|
||||
var ref, tgt targetCfg
|
||||
refErr := treeDecodeInto([]byte(doc), &ref)
|
||||
dec := NewDecoder()
|
||||
tgtErr := dec.Decode([]byte(doc), &tgt)
|
||||
tgtErr := Unmarshal([]byte(doc), &tgt)
|
||||
if (refErr == nil) != (tgtErr == nil) {
|
||||
t.Errorf("doc %d: error presence disagrees: tree %v, targeted %v", i, refErr, tgtErr)
|
||||
continue
|
||||
@@ -283,7 +282,7 @@ func TestTargetedFallbackContracts(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
err := NewDecoder().Decode([]byte(tt.doc), &cfg)
|
||||
err := Unmarshal([]byte(tt.doc), &cfg)
|
||||
if err == nil || err.Error() != tt.want {
|
||||
t.Errorf("err = %v, want %q", err, tt.want)
|
||||
}
|
||||
@@ -297,7 +296,7 @@ func TestTargetedFallbackContracts(t *testing.T) {
|
||||
func TestTargetedHeaderOnAssignedScalarArray(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
in := []byte("arr = []\n[[arr]]\nx = 1\n")
|
||||
err := NewDecoder().Decode(in, &cfg)
|
||||
err := Unmarshal(in, &cfg)
|
||||
want := "interpres: line 2: key \"arr\" is not an array of tables"
|
||||
if err == nil || err.Error() != want {
|
||||
t.Errorf("err = %v, want %q", err, want)
|
||||
@@ -362,7 +361,7 @@ func TestTargetedBranchParity(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
err := NewDecoder().DisallowUnknownFields().Decode([]byte(tt.doc), &cfg)
|
||||
err := Unmarshal([]byte(tt.doc), &cfg, RejectUnknownFields(true))
|
||||
if tt.want == "" {
|
||||
if err != nil {
|
||||
t.Fatalf("err = %v, want nil", err)
|
||||
@@ -386,7 +385,7 @@ func TestTargetedDecodeHookFields(t *testing.T) {
|
||||
}
|
||||
var cfg Cfg
|
||||
in := []byte("ip = \"192.0.2.1\"\ndur = \"1h30m\"\nunm = \"hello\"\n")
|
||||
if err := NewDecoder().Decode(in, &cfg); err != nil {
|
||||
if err := Unmarshal(in, &cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cfg.IP.String() != "192.0.2.1" {
|
||||
@@ -410,7 +409,7 @@ func TestTargetedOddShapes(t *testing.T) {
|
||||
}
|
||||
var cfg, ref Cfg
|
||||
doc := []byte("when = 1979-05-27 07:32:00Z\n")
|
||||
if err := NewDecoder().Decode(doc, &cfg); err != nil {
|
||||
if err := Unmarshal(doc, &cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := treeDecodeInto(doc, &ref); err != nil {
|
||||
@@ -426,7 +425,7 @@ func TestTargetedOddShapes(t *testing.T) {
|
||||
}
|
||||
var cfg, ref Cfg
|
||||
doc := []byte("m = { a = 1 }\n")
|
||||
err := NewDecoder().Decode(doc, &cfg)
|
||||
err := Unmarshal(doc, &cfg)
|
||||
refErr := treeDecodeInto(doc, &ref)
|
||||
if err == nil || refErr == nil {
|
||||
t.Fatalf("err = %v, refErr = %v, want both to fail", err, refErr)
|
||||
@@ -438,7 +437,7 @@ func TestTargetedOddShapes(t *testing.T) {
|
||||
t.Run("a repeated dotted map key is a duplicate", func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
doc := []byte("lims.a.b = 1\nlims.a.b = 2\n")
|
||||
err := NewDecoder().Decode(doc, &cfg)
|
||||
err := Unmarshal(doc, &cfg)
|
||||
want := "interpres: line 2: duplicate key \"b\""
|
||||
if err == nil || err.Error() != want {
|
||||
t.Errorf("err = %v, want %q", err, want)
|
||||
@@ -447,7 +446,7 @@ func TestTargetedOddShapes(t *testing.T) {
|
||||
t.Run("an underscored integer takes the token path", func(t *testing.T) {
|
||||
var cfg targetCfg
|
||||
doc := []byte("num = 1_000\n")
|
||||
if err := NewDecoder().Decode(doc, &cfg); err != nil {
|
||||
if err := Unmarshal(doc, &cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cfg.Num != 1000 {
|
||||
@@ -459,7 +458,7 @@ func TestTargetedOddShapes(t *testing.T) {
|
||||
Big int64 `toml:"big"`
|
||||
}
|
||||
doc := []byte("big = 999999999999999999\n")
|
||||
if err := NewDecoder().Decode(doc, &cfg); err != nil {
|
||||
if err := Unmarshal(doc, &cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cfg.Big != 999999999999999999 {
|
||||
@@ -506,7 +505,7 @@ func TestTargetedMapTableShapes(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var cfg, ref targetCfg
|
||||
err := NewDecoder().Decode([]byte(tt.doc), &cfg)
|
||||
err := Unmarshal([]byte(tt.doc), &cfg)
|
||||
refErr := treeDecodeInto([]byte(tt.doc), &ref)
|
||||
if (err == nil) != (refErr == nil) {
|
||||
t.Fatalf("error presence disagrees: tree %v, targeted %v", refErr, err)
|
||||
|
||||
Reference in New Issue
Block a user