Raw
 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}