MCPcopy Create free account
hub / github.com/dxx/feignhttp / client_fn_impl

Function client_fn_impl

codegen/src/func.rs:52–136  ·  view source on GitHub ↗
(mut item_struct: DataStruct)

Source from the content-addressed store, hash-verified

50}
51
52pub fn client_fn_impl(mut item_struct: DataStruct) -> syn::Result<proc_macro2::TokenStream> {
53 let args = parse_args_from_struct(&mut item_struct)?;
54
55 let (param_names, param_vars) = find_type_name_vars(&args, ArgType::PARAM, |_fn_arg| true);
56
57 let (path_names, path_vars) = find_type_name_vars(&args, ArgType::PATH, |_fn_arg| true);
58
59 let (header_names, header_vars) =
60 find_type_name_vars(&args, ArgType::HEADER, |fn_arg| !filter_struct(fn_arg));
61
62 let (_header_struct_names, header_struct_vars) =
63 find_type_name_vars(&args, ArgType::HEADER, |fn_arg| filter_struct(fn_arg));
64
65 let (query_names, query_vars) = find_type_name_vars(&args, ArgType::QUERY, |fn_arg| {
66 !filter_query_array(fn_arg) && !filter_struct(fn_arg)
67 });
68
69 let (query_array_names, query_array_vars) =
70 find_type_name_vars(&args, ArgType::QUERY, |fn_arg| filter_query_array(fn_arg));
71
72 let (_query_struct_names, query_struct_vars) =
73 find_type_name_vars(&args, ArgType::QUERY, |fn_arg| filter_struct(fn_arg));
74
75 let tokens = quote!(
76 fn param_map(&self) -> ::std::collections::HashMap<String, String> {
77 let mut out = ::std::collections::HashMap::new();
78 #(
79 out.insert(#param_names.to_string(), self.#param_vars.to_string());
80 )*
81 out
82 }
83
84 fn path_map(&self) -> ::std::collections::HashMap<String, String> {
85 let mut out = ::std::collections::HashMap::new();
86 #(
87 out.insert(#path_names.to_string(), self.#path_vars.to_string());
88 )*
89 out
90 }
91
92 fn header_map(&self) -> ::feignhttp::Result<::std::collections::HashMap<String, String>> {
93 use ::feignhttp::ser;
94
95 let mut out = ::std::collections::HashMap::new();
96 #(
97 out.insert(#header_names.to_string(), self.#header_vars.to_string());
98 )*
99
100 #(
101 let map = ser::to_map(& self.#header_struct_vars)?;
102 for (key, value) in map {
103 out.insert(key, value.to_string());
104 }
105 )*
106
107 Ok(out)
108 }
109

Callers 2

feign_context_implFunction · 0.85
leagcy_feign_client_implFunction · 0.85

Calls 4

parse_args_from_structFunction · 0.85
find_type_name_varsFunction · 0.70
filter_structFunction · 0.70
filter_query_arrayFunction · 0.70

Tested by

no test coverage detected