in pkg/runner/step_file.go [79:125]
func (s *StepFile) ReadKeyValueLines() (map[string]*structpb.Value, error) {
file, err := os.Open(s.path)
if err != nil {
return nil, fmt.Errorf("opening file %v: %w", s.path, err)
}
out := map[string]*structpb.Value{}
scanner := bufio.NewScanner(file)
for i := 1; scanner.Scan(); i++ {
line := scanner.Bytes()
errCtx := NewErrorCtx("line", line)
if len(line) == 0 {
continue
}
v := &StepFileLine{}
if err = json.Unmarshal(line, v); err != nil {
return nil, errCtx.Errorf("%s %d: %w", lineErrMsg, i, err)
}
if v.Name == nil && !strings.Contains(string(line), `"name"`) {
return nil, errCtx.Errorf(`%s %d: "name" field is missing`, lineErrMsg, i)
}
if v.Name == nil {
return nil, errCtx.Errorf(`%s %d: "name" field value is null`, lineErrMsg, i)
}
if *v.Name == "" {
return nil, errCtx.Errorf(`%s %d: "name" field value is empty`, lineErrMsg, i)
}
if v.Value == nil && !strings.Contains(string(line), `"value"`) {
return nil, errCtx.Errorf(`%s %d: "value" field is missing`, lineErrMsg, i)
}
if v.Value == nil {
return nil, errCtx.Errorf(`%s %d: "value" field value is null`, lineErrMsg, i)
}
out[*v.Name] = v.Value
}
return out, nil
}