openapi_type/visitor/
mod.rs

1mod never;
2mod openapi;
3
4pub use openapi::{OpenapiSchema, OpenapiVisitor};
5
6mod seal {
7	pub trait Sealed {}
8}
9
10/// This trait can be used to visit a type. Call **one** of the methods on this
11/// trait **exactly once**.
12pub trait Visitor: seal::Sealed {
13	type OptionVisitor: Visitor;
14	type ArrayVisitor: Visitor;
15	type ObjectVisitor: ObjectVisitor;
16	type AlternativesVisitor: AlternativesVisitor;
17
18	fn visit_unit(&mut self) {
19		self.visit_unit_struct(None, None);
20	}
21
22	fn visit_unit_struct(&mut self, name: Option<String>, description: Option<String>);
23
24	fn visit_any(&mut self);
25
26	fn visit_bool(&mut self);
27
28	fn visit_int(&mut self, byte: Option<u32>, minimum: Option<i64>);
29
30	fn visit_number(&mut self, byte: Option<u32>);
31
32	fn visit_char(&mut self);
33
34	fn visit_string(&mut self);
35
36	fn visit_uuid(&mut self);
37
38	fn visit_date(&mut self);
39
40	fn visit_datetime(&mut self);
41
42	fn visit_binary(&mut self);
43
44	fn visit_option(&mut self) -> &mut Self::OptionVisitor;
45
46	fn visit_enum<I>(&mut self, name: Option<String>, description: Option<String>, variants: I)
47	where
48		I: IntoIterator<Item = String>;
49
50	fn visit_array(&mut self, len: Option<usize>, unique_items: bool) -> &mut Self::ArrayVisitor;
51
52	fn visit_object(&mut self) -> &mut Self::ObjectVisitor;
53
54	fn visit_alternatives(&mut self) -> &mut Self::AlternativesVisitor;
55}
56
57pub trait ObjectVisitor: seal::Sealed {
58	type FieldVisitor: Visitor;
59	type FlattenVisitor: Visitor;
60	type ValueVisitor: Visitor;
61
62	fn visit_name(&mut self, name: String);
63
64	fn visit_description(&mut self, description: String);
65
66	fn visit_field(&mut self, name: String, doc: Option<String>) -> &mut Self::FieldVisitor;
67
68	fn visit_flatten_field(&mut self) -> &mut Self::FlattenVisitor;
69
70	fn visit_deny_additional(&mut self);
71
72	fn visit_additional(&mut self) -> &mut Self::ValueVisitor;
73}
74
75pub trait AlternativesVisitor: seal::Sealed {
76	type Visitor: Visitor;
77
78	fn visit_name(&mut self, name: String);
79
80	fn visit_description(&mut self, description: String);
81
82	fn visit_alternative(&mut self) -> &mut Self::Visitor;
83}