schemars/json_schema_impls/
sequences.rs
1use crate::gen::SchemaGenerator;
2use crate::schema::*;
3use crate::JsonSchema;
4
5macro_rules! seq_impl {
6 ($($desc:tt)+) => {
7 impl $($desc)+
8 where
9 T: JsonSchema,
10 {
11 no_ref_schema!();
12
13 fn schema_name() -> String {
14 format!("Array_of_{}", T::schema_name())
15 }
16
17 fn json_schema(gen: &mut SchemaGenerator) -> Schema {
18 SchemaObject {
19 instance_type: Some(InstanceType::Array.into()),
20 array: Some(Box::new(ArrayValidation {
21 items: Some(gen.subschema_for::<T>().into()),
22 ..Default::default()
23 })),
24 ..Default::default()
25 }
26 .into()
27 }
28 }
29 };
30}
31
32macro_rules! set_impl {
33 ($($desc:tt)+) => {
34 impl $($desc)+
35 where
36 T: JsonSchema,
37 {
38 no_ref_schema!();
39
40 fn schema_name() -> String {
41 format!("Set_of_{}", T::schema_name())
42 }
43
44 fn json_schema(gen: &mut SchemaGenerator) -> Schema {
45 SchemaObject {
46 instance_type: Some(InstanceType::Array.into()),
47 array: Some(Box::new(ArrayValidation {
48 unique_items: Some(true),
49 items: Some(gen.subschema_for::<T>().into()),
50 ..Default::default()
51 })),
52 ..Default::default()
53 }
54 .into()
55 }
56 }
57 };
58}
59
60seq_impl!(<T> JsonSchema for std::collections::BinaryHeap<T>);
61seq_impl!(<T> JsonSchema for std::collections::LinkedList<T>);
62seq_impl!(<T> JsonSchema for [T]);
63seq_impl!(<T> JsonSchema for Vec<T>);
64seq_impl!(<T> JsonSchema for std::collections::VecDeque<T>);
65
66set_impl!(<T> JsonSchema for std::collections::BTreeSet<T>);
67set_impl!(<T, H> JsonSchema for std::collections::HashSet<T, H>);