salvo_oapi/extract/
parameter.rs1pub use salvo_core::extract::{CookieParam, HeaderParam, PathParam, QueryParam};
4
5use crate::endpoint::EndpointArgRegister;
6use crate::{Components, Operation, Parameter, ParameterIn, ToSchema};
7
8impl<T, const REQUIRED: bool> EndpointArgRegister for CookieParam<T, REQUIRED>
9where
10 T: ToSchema,
11{
12 fn register(components: &mut Components, operation: &mut Operation, arg: &str) {
13 let parameter = Parameter::new(arg)
14 .location(ParameterIn::Cookie)
15 .description(format!("Get parameter `{arg}` from request cookie."))
16 .schema(T::to_schema(components))
17 .required(REQUIRED);
18 operation.parameters.insert(parameter);
19 }
20}
21
22impl<T, const REQUIRED: bool> EndpointArgRegister for HeaderParam<T, REQUIRED>
23where
24 T: ToSchema,
25{
26 fn register(components: &mut Components, operation: &mut Operation, arg: &str) {
27 let parameter = Parameter::new(arg)
28 .location(ParameterIn::Header)
29 .description(format!("Get parameter `{arg}` from request headers."))
30 .schema(T::to_schema(components))
31 .required(REQUIRED);
32 operation.parameters.insert(parameter);
33 }
34}
35
36impl<T> EndpointArgRegister for PathParam<T>
37where
38 T: ToSchema,
39{
40 fn register(components: &mut Components, operation: &mut Operation, arg: &str) {
41 let parameter = Parameter::new(arg)
42 .location(ParameterIn::Path)
43 .description(format!("Get parameter `{arg}` from request url path."))
44 .schema(T::to_schema(components))
45 .required(true);
46 operation.parameters.insert(parameter);
47 }
48}
49
50impl<T, const REQUIRED: bool> EndpointArgRegister for QueryParam<T, REQUIRED>
51where
52 T: ToSchema,
53{
54 fn register(components: &mut Components, operation: &mut Operation, arg: &str) {
55 let parameter = Parameter::new(arg)
56 .location(ParameterIn::Query)
57 .description(format!("Get parameter `{arg}` from request url query."))
58 .schema(T::to_schema(components))
59 .required(REQUIRED);
60 operation.parameters.insert(parameter);
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use assert_json_diff::assert_json_eq;
67 use serde_json::json;
68
69 use super::*;
70
71 #[test]
72 fn test_cookie_param_register() {
73 let mut components = Components::new();
74 let mut operation = Operation::new();
75 CookieParam::<String, false>::register(&mut components, &mut operation, "arg");
76
77 assert_json_eq!(
78 operation,
79 json!({
80 "parameters": [{
81 "name": "arg",
82 "in": "cookie",
83 "description": "Get parameter `arg` from request cookie.",
84 "required": false,
85 "schema": { "type": "string" }
86 }],
87 "responses": {}
88 })
89 );
90 }
91
92 #[test]
93 fn test_header_param_register() {
94 let mut components = Components::new();
95 let mut operation = Operation::new();
96 HeaderParam::<String, false>::register(&mut components, &mut operation, "arg");
97
98 assert_json_eq!(
99 operation,
100 json!({
101 "parameters": [{
102 "name": "arg",
103 "in": "header",
104 "description": "Get parameter `arg` from request headers.",
105 "required": false,
106 "schema": { "type": "string" }
107 }],
108 "responses": {}
109 })
110 );
111 }
112
113 #[test]
114 fn test_path_param_register() {
115 let mut components = Components::new();
116 let mut operation = Operation::new();
117 PathParam::<String>::register(&mut components, &mut operation, "arg");
118
119 assert_json_eq!(
120 operation,
121 json!({
122 "parameters": [{
123 "name": "arg",
124 "in": "path",
125 "description": "Get parameter `arg` from request url path.",
126 "required": true,
127 "schema": { "type": "string" }
128 }],
129 "responses": {}
130 })
131 );
132 }
133
134 #[test]
135 fn test_query_param_register() {
136 let mut components = Components::new();
137 let mut operation = Operation::new();
138 QueryParam::<String, false>::register(&mut components, &mut operation, "arg");
139
140 assert_json_eq!(
141 operation,
142 json!({
143 "parameters": [{
144 "name": "arg",
145 "in": "query",
146 "description": "Get parameter `arg` from request url query.",
147 "required": false,
148 "schema": { "type": "string" }
149 }],
150 "responses": {}
151 })
152 );
153 }
154}