pub trait ErasedSchema: Send + Sync + 'static {
fn json_schema(&self) -> serde_json::Value;
fn as_any(&self) -> &dyn std::any::Any;
}
pub struct NoSchema;
impl ErasedSchema for NoSchema {
fn json_schema(&self) -> serde_json::Value {
serde_json::Value::Null
}
fn as_any(&self) -> &dyn std::any::Any {
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn no_schema_returns_null() {
let schema = NoSchema;
assert_eq!(schema.json_schema(), serde_json::Value::Null);
}
#[test]
fn erased_schema_is_object_safe() {
let _boxed: Box<dyn ErasedSchema> = Box::new(NoSchema);
}
#[test]
fn erased_schema_send_sync() {
fn assert_send_sync<T: Send + Sync>() {}
assert_send_sync::<Box<dyn ErasedSchema>>();
}
}