use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SchemaMetadata {
pub(crate) schema_version: Option<u32>,
}
impl SchemaMetadata {
pub fn new(schema_version: Option<u32>) -> Result<Self, SchemaMetadataError> {
let metadata = Self { schema_version };
metadata.validate()?;
Ok(metadata)
}
pub fn validate(&self) -> Result<(), SchemaMetadataError> {
if self.schema_version == Some(0) {
return Err(SchemaMetadataError::InvalidVersion);
}
Ok(())
}
#[must_use]
pub const fn schema_version(&self) -> Option<u32> {
self.schema_version
}
}
#[non_exhaustive]
#[derive(Clone, Debug, Eq, thiserror::Error, PartialEq)]
pub enum SchemaMetadataError {
#[error("schema_version must be greater than zero when present")]
InvalidVersion,
}