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