1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
#![allow(clippy::large_enum_variant)] pub type Map<K, V> = std::collections::BTreeMap<K, V>; pub type Set<T> = std::collections::BTreeSet<T>; mod error; mod json_schema_impls; #[macro_use] mod macros; pub mod gen; pub mod schema; pub use error::*; pub use schemars_derive::*; pub trait JsonSchema { fn is_referenceable() -> bool { true } fn schema_name() -> String; fn json_schema(gen: &mut gen::SchemaGenerator) -> Result; } #[cfg(test)] pub mod tests { use super::*; pub fn schema_object_for<T: JsonSchema>() -> schema::SchemaObject { schema_object(schema_for::<T>()) } pub fn custom_schema_object_for<T: JsonSchema>( settings: gen::SchemaSettings, ) -> schema::SchemaObject { schema_object(custom_schema_for::<T>(settings)) } pub fn schema_for<T: JsonSchema>() -> schema::Schema { custom_schema_for::<T>(Default::default()) } pub fn custom_schema_for<T: JsonSchema>(settings: gen::SchemaSettings) -> schema::Schema { match T::json_schema(&mut gen::SchemaGenerator::new(settings)) { Ok(s) => s, Err(e) => panic!( "Couldn't generate schema object for {}: {}", T::schema_name(), e ), } } pub fn schema_object(schema: schema::Schema) -> schema::SchemaObject { match schema { schema::Schema::Object(o) => o, s => panic!("Schema was not an object: {:?}", s), } } }