package config import ( "bytes" "errors" "strings" "github.com/pelletier/go-toml/v2" ) func decodeTyped(file string, data []byte, idx *keyIndex, pass1 []Problem) (*rawFile, []Problem) { var raw rawFile dec := toml.NewDecoder(bytes.NewReader(data)) dec.DisallowUnknownFields() err := dec.Decode(&raw) if err == nil { return &raw, nil } var missing *toml.StrictMissingError if errors.As(err, &missing) { if len(pass1) > 0 { return nil, nil } problems := make([]Problem, 0, len(missing.Errors)) for _, e := range missing.Errors { row, col := e.Position() problems = append(problems, Problem{File: file, Line: row, Key: idx.keyAt(row, col), Reason: reasonUnknownKey}) } return nil, problems } p := decodeProblem(file, err, idx, true) for _, q := range pass1 { if p.Key == q.Key || strings.HasPrefix(p.Key, q.Key+".") || strings.HasPrefix(p.Key, q.Key+"[") { return nil, nil } } return nil, []Problem{p} }