pub struct MetadataSchema { /* private fields */ }Expand description
Schema for metadata fields.
A schema declares valid keys, their concrete DataType, and whether they
are required. It can validate actual Metadata values and validate that a
crate::MetadataFilter references known fields with compatible operators.
§Examples
use qubit_datatype::DataType;
use qubit_metadata::Metadata;
use qubit_metadata::MetadataSchema;
let metadata = Metadata::new().with("tenant", "acme");
let schema = MetadataSchema::builder()
.required("tenant", DataType::String)
.build()?;
schema.validate(&metadata)?;Implementations§
Source§impl MetadataSchema
impl MetadataSchema
Sourcepub fn validate_filter(
&self,
filter: &MetadataFilter,
) -> MetadataValidationResult<()>
pub fn validate_filter( &self, filter: &MetadataFilter, ) -> MetadataValidationResult<()>
Validates a metadata filter against this schema.
§Parameters
filter- Filter to validate.
§Returns
Ok(()) when every condition is compatible with this schema.
§Errors
Returns an aggregate error containing every unknown field, invalid range
operator, and incompatible filter value discovered during this
validation pass. Unknown filter fields are accepted when the
schema’s UnknownFilterFieldPolicy is
UnknownFilterFieldPolicy::AllowUnchecked.
Source§impl MetadataSchema
impl MetadataSchema
Sourcepub fn builder() -> MetadataSchemaBuilder
pub fn builder() -> MetadataSchemaBuilder
Sourcepub fn decode_json_slice(input: &[u8]) -> Result<Self, MetadataWireDecodeError>
pub fn decode_json_slice(input: &[u8]) -> Result<Self, MetadataWireDecodeError>
Sourcepub fn decode_json_slice_with_limits(
input: &[u8],
limits: MetadataLimits,
) -> Result<Self, MetadataWireDecodeError>
pub fn decode_json_slice_with_limits( input: &[u8], limits: MetadataLimits, ) -> Result<Self, MetadataWireDecodeError>
Decodes a strict metadata-schema JSON envelope after applying
limits.
§Parameters
input- Complete untrusted JSON input.limits- Shared JSON limits for this decoding session.
§Returns
The decoded metadata schema.
§Errors
Returns a structured budget error, Domain for field/key limits,
UnsupportedVersion for version mismatches, or redacted JSON errors for
syntax and other strict schema-envelope failures.
Sourcepub fn to_json_vec(&self) -> Result<Vec<u8>, MetadataWireEncodeError>
pub fn to_json_vec(&self) -> Result<Vec<u8>, MetadataWireEncodeError>
Encodes this schema with the default JSON budget profile.
Sourcepub fn to_json_vec_with_limits(
&self,
limits: JsonEncodeLimits,
) -> Result<Vec<u8>, MetadataWireEncodeError>
pub fn to_json_vec_with_limits( &self, limits: JsonEncodeLimits, ) -> Result<Vec<u8>, MetadataWireEncodeError>
Encodes this schema with caller-provided JSON budgets.
§Parameters
limits- Output and JSON-value budgets for this operation.
§Errors
Returns crate::MetadataWireEncodeError when encoding exceeds a
budget or serialization fails.
Sourcepub fn to_json_writer<W>(
&self,
writer: W,
) -> Result<(), MetadataWireEncodeError>where
W: Write,
pub fn to_json_writer<W>(
&self,
writer: W,
) -> Result<(), MetadataWireEncodeError>where
W: Write,
Encodes this schema to a writer with the default JSON budget profile.
Sourcepub fn to_json_writer_with_limits<W>(
&self,
writer: W,
limits: JsonEncodeLimits,
) -> Result<(), MetadataWireEncodeError>where
W: Write,
pub fn to_json_writer_with_limits<W>(
&self,
writer: W,
limits: JsonEncodeLimits,
) -> Result<(), MetadataWireEncodeError>where
W: Write,
Encodes this schema to a writer with caller-provided JSON budgets.
§Parameters
writer- Destination receiving the compact JSON document.limits- Output and JSON-value budgets for this operation.
§Errors
Returns crate::MetadataWireEncodeError when encoding exceeds a
budget, serialization fails, or writer rejects the output.
Sourcepub fn field(&self, key: &str) -> Option<&MetadataField>
pub fn field(&self, key: &str) -> Option<&MetadataField>
Sourcepub fn field_type(&self, key: &str) -> Option<DataType>
pub fn field_type(&self, key: &str) -> Option<DataType>
Sourcepub fn unknown_metadata_field_policy(&self) -> UnknownMetadataFieldPolicy
pub fn unknown_metadata_field_policy(&self) -> UnknownMetadataFieldPolicy
Returns the policy for undeclared metadata fields.
§Returns
The policy applied to undeclared metadata keys.
Sourcepub fn unknown_filter_field_policy(&self) -> UnknownFilterFieldPolicy
pub fn unknown_filter_field_policy(&self) -> UnknownFilterFieldPolicy
Returns the policy for undeclared filter fields.
§Returns
The policy applied to filter keys not declared in this schema.
Sourcepub fn fields(&self) -> impl Iterator<Item = (&str, &MetadataField)>
pub fn fields(&self) -> impl Iterator<Item = (&str, &MetadataField)>
Returns an iterator over schema fields in key-sorted order.
§Returns
An iterator yielding key and field-definition pairs.
Sourcepub fn validate(&self, meta: &Metadata) -> MetadataValidationResult<()>
pub fn validate(&self, meta: &Metadata) -> MetadataValidationResult<()>
Sourcepub fn validate_wire_contract(&self) -> MetadataResult<()>
pub fn validate_wire_contract(&self) -> MetadataResult<()>
Validates that this schema fits the strict V1 wire contract.
This preflight checks the same field-count and key-byte limits enforced
by Serialize::serialize, allowing callers to reject invalid schemas
before crossing a persistence or network boundary.
§Returns
Ok(()) when every field can satisfy the schema map limits.
§Errors
Returns MetadataError::WireLimitExceeded when the field count or a
field key exceeds the strict V1 limit.
Trait Implementations§
Source§impl Clone for MetadataSchema
impl Clone for MetadataSchema
Source§fn clone(&self) -> MetadataSchema
fn clone(&self) -> MetadataSchema
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MetadataSchema
impl Debug for MetadataSchema
Source§impl Default for MetadataSchema
impl Default for MetadataSchema
Source§impl<'de> Deserialize<'de> for MetadataSchema
impl<'de> Deserialize<'de> for MetadataSchema
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserializes only the strict v1 schema envelope.