func ValidateDimensionsPresent()

in code/go/internal/validator/semantic/validate_dimensions_present.go [18:48]


func ValidateDimensionsPresent(fsys fspath.FS) specerrors.ValidationErrors {
	dimensionPresent := make(map[string]struct{})
	errs := validateFields(fsys, func(metadata fieldFileMetadata, f field) specerrors.ValidationErrors {
		if f.Dimension {
			dimensionPresent[metadata.dataStream] = struct{}{}
		}
		return nil
	})
	if len(errs) > 0 {
		return errs
	}

	dataStreams, err := listDataStreams(fsys)
	if err != nil {
		return specerrors.ValidationErrors{specerrors.NewStructuredError(err, specerrors.UnassignedCode)}
	}
	for _, dataStream := range dataStreams {
		tsEnabled, err := isTimeSeriesModeEnabled(fsys, dataStream)
		if err != nil {
			return specerrors.ValidationErrors{specerrors.NewStructuredError(err, specerrors.UnassignedCode)}
		}
		_, hasDimensions := dimensionPresent[dataStream]
		if tsEnabled && !hasDimensions {
			errs = append(errs, specerrors.NewStructuredErrorf(
				`file "%s" is invalid: time series mode enabled but no dimensions configured`,
				fsys.Path("data_stream", dataStream, "manifest.yml"),
			))
		}
	}
	return errs
}