func()

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
}