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>);