pincer_core/
param_meta.rs1use std::fmt;
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub enum ParamLocation {
12 Path,
14 Query,
16 Header,
18 Body,
20 Form,
22}
23
24impl fmt::Display for ParamLocation {
25 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26 match self {
27 Self::Path => write!(f, "path"),
28 Self::Query => write!(f, "query"),
29 Self::Header => write!(f, "header"),
30 Self::Body => write!(f, "body"),
31 Self::Form => write!(f, "form"),
32 }
33 }
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq)]
41pub struct ParamMeta {
42 pub name: &'static str,
44 pub location: ParamLocation,
46 pub type_name: &'static str,
48 pub required: bool,
50}
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
69pub struct ParameterMetadata {
70 pub method_name: &'static str,
72 pub parameters: &'static [ParamMeta],
74}
75
76#[cfg(test)]
77mod tests {
78 use super::*;
79
80 #[test]
81 fn param_location_display() {
82 assert_eq!(ParamLocation::Path.to_string(), "path");
83 assert_eq!(ParamLocation::Query.to_string(), "query");
84 assert_eq!(ParamLocation::Header.to_string(), "header");
85 assert_eq!(ParamLocation::Body.to_string(), "body");
86 assert_eq!(ParamLocation::Form.to_string(), "form");
87 }
88
89 #[test]
90 fn param_meta_construction() {
91 let meta = ParamMeta {
92 name: "id",
93 location: ParamLocation::Path,
94 type_name: "u64",
95 required: true,
96 };
97 assert_eq!(meta.name, "id");
98 assert_eq!(meta.location, ParamLocation::Path);
99 assert_eq!(meta.type_name, "u64");
100 assert!(meta.required);
101 }
102
103 #[test]
104 fn parameter_metadata_construction() {
105 static PARAMS: &[ParamMeta] = &[
106 ParamMeta {
107 name: "id",
108 location: ParamLocation::Path,
109 type_name: "u64",
110 required: true,
111 },
112 ParamMeta {
113 name: "limit",
114 location: ParamLocation::Query,
115 type_name: "Option<u32>",
116 required: false,
117 },
118 ];
119
120 let meta = ParameterMetadata {
121 method_name: "get_user",
122 parameters: PARAMS,
123 };
124
125 assert_eq!(meta.method_name, "get_user");
126 assert_eq!(meta.parameters.len(), 2);
127 assert_eq!(meta.parameters.first().expect("first param").name, "id");
128 assert_eq!(meta.parameters.get(1).expect("second param").name, "limit");
129 }
130
131 #[test]
132 fn parameter_metadata_default() {
133 let meta = ParameterMetadata::default();
134 assert_eq!(meta.method_name, "");
135 assert!(meta.parameters.is_empty());
136 }
137}