1package config
2
3import (
4 "bytes"
5 "errors"
6 "strings"
7
8 "github.com/pelletier/go-toml/v2"
9)
10
11func decodeTyped(file string, data []byte, idx *keyIndex, pass1 []Problem) (*rawFile, []Problem) {
12 var raw rawFile
13 dec := toml.NewDecoder(bytes.NewReader(data))
14 dec.DisallowUnknownFields()
15 err := dec.Decode(&raw)
16 if err == nil {
17 return &raw, nil
18 }
19 var missing *toml.StrictMissingError
20 if errors.As(err, &missing) {
21 if len(pass1) > 0 {
22 return nil, nil
23 }
24 problems := make([]Problem, 0, len(missing.Errors))
25 for _, e := range missing.Errors {
26 row, col := e.Position()
27 problems = append(problems, Problem{File: file, Line: row, Key: idx.keyAt(row, col), Reason: reasonUnknownKey})
28 }
29 return nil, problems
30 }
31 p := decodeProblem(file, err, idx, true)
32 for _, q := range pass1 {
33 if p.Key == q.Key || strings.HasPrefix(p.Key, q.Key+".") || strings.HasPrefix(p.Key, q.Key+"[") {
34 return nil, nil
35 }
36 }
37 return nil, []Problem{p}
38}