pub const SCHEMA_VERSION: u32 = 3;
pub const SUPPORTED_TRACE_VERSION_MIN: u32 = 2;
pub const SUPPORTED_TRACE_VERSION_MAX: u32 = 3;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct UnsupportedTraceVersion {
pub found: u32,
pub min: u32,
pub max: u32,
}
impl std::fmt::Display for UnsupportedTraceVersion {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"unsupported trace_version {} (supported {}..={})",
self.found, self.min, self.max
)
}
}
impl std::error::Error for UnsupportedTraceVersion {}
pub fn check_trace_version(version: Option<u32>) -> Result<(), UnsupportedTraceVersion> {
let v = version.unwrap_or(SCHEMA_VERSION);
if !(SUPPORTED_TRACE_VERSION_MIN..=SUPPORTED_TRACE_VERSION_MAX).contains(&v) {
return Err(UnsupportedTraceVersion {
found: v,
min: SUPPORTED_TRACE_VERSION_MIN,
max: SUPPORTED_TRACE_VERSION_MAX,
});
}
Ok(())
}