Skip to main content

Module validation

Module validation 

Source
Expand description

Semantic validation of SigMF metadata and collections.

Validation complements parsing: a document that deserializes successfully may still violate SigMF rules or use features this crate cannot vouch for. The entry points are Metadata::validate, Collection::validate, their validate_with_registry variants, and Archive::validate_collection_references. Each returns a ValidationReport listing every ValidationIssue found and an overall ValidationStatus.

§What is checked

For .sigmf-meta documents (Metadata):

  • core:version is the certified version (1.2.6);
  • core:sample_rate is finite, positive, and at most 1012;
  • indices and counts (core:num_channels, core:offset, core:sample_start, core:sample_count, …) fit in 263 − 1, and core:num_channels is non-zero;
  • core:sha512 is 128 hexadecimal characters;
  • frequencies are finite, annotation frequency edges are paired and ordered, and annotation sample ranges do not overflow;
  • core:datetime uses the UTC YYYY-MM-DDTHH:MM:SS[.fraction]Z form;
  • core:geolocation is a GeoJSON Point with two or three finite coordinates;
  • captures and annotations are sorted by core:sample_start, and sample indices are not before core:offset;
  • unrecognized core: fields, and extension fields whose namespace is not declared in core:extensions;
  • declared extensions are checked against an optional ExtensionRegistry for support, scope, and field names.

For .sigmf-collection documents (Collection): version, recording names (relative, no .., no backslashes, no empty segments), duplicate references, metadata digests, unknown core: fields, and extensions.

§Policies

A ValidationPolicy controls how strictly portability concerns are treated. Under ValidationPolicy::Interoperability an unsupported version, unknown core: fields, and unregistered required extensions are warnings; under ValidationPolicy::StrictSupportedVersion they are errors.

§Example

use sigmf::datatype::Datatype;
use sigmf::global::Global;
use sigmf::meta::Metadata;
use sigmf::validation::{ValidationPolicy, ValidationStatus};
use std::str::FromStr;

let mut metadata = Metadata::new(
    Global::new("1.2.6", Datatype::from_str("cf32_le")?),
    Vec::new(),
    Vec::new(),
);
metadata.set_sample_rate(1e6);
let report = metadata.validate(ValidationPolicy::StrictSupportedVersion);
assert_eq!(report.status, ValidationStatus::Passed);

metadata.set_sample_rate(-1.0);
let report = metadata.validate(ValidationPolicy::StrictSupportedVersion);
assert_eq!(report.status, ValidationStatus::Failed);
assert!(report
    .issues
    .iter()
    .any(|issue| issue.code == "sample-rate-out-of-range"));

Structs§

ValidationIssue
A single problem found during validation.
ValidationReport
The result of validating a SigMF document.

Enums§

Severity
Severity of a ValidationIssue.
ValidationPolicy
How strictly validation treats content this implementation cannot fully verify.
ValidationStatus
Overall outcome of a validation run.