Extract methods
This commit is contained in:
parent
4d7400c3bf
commit
2776870e0d
|
@ -18,37 +18,18 @@ pub fn create_method_with_params(
|
||||||
method.name.to_camel()
|
method.name.to_camel()
|
||||||
));
|
));
|
||||||
|
|
||||||
let mandatory_params = params
|
let mandatory_params = mandatory_params(params);
|
||||||
|
let mandatory_param_args = mandatory_params
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|param| !param.get_type_info().is_optional);
|
.map(|param| param_with_name(param))
|
||||||
|
.collect::<Vec<proc_macro2::TokenStream>>();
|
||||||
|
|
||||||
let param_name = |param: &types::Type| {
|
let mandatory_param_names = mandatory_params.iter().map(|param| {
|
||||||
let name_as_str = param.get_type_info().name.to_snake();
|
|
||||||
(util::to_ident(&name_as_str), name_as_str)
|
|
||||||
};
|
|
||||||
|
|
||||||
let param_with_name = |param: &types::Type| {
|
|
||||||
let t = util::to_ident(¶m.to_borrowed_type());
|
|
||||||
|
|
||||||
let (name, ..) = param_name(param);
|
|
||||||
let t = if param.should_borrow() {
|
|
||||||
quote! { &#t }
|
|
||||||
} else {
|
|
||||||
quote! { #t }
|
|
||||||
};
|
|
||||||
|
|
||||||
quote! { #name: #t }
|
|
||||||
};
|
|
||||||
|
|
||||||
let mandatory_param_args = mandatory_params.clone().map(|param| param_with_name(param));
|
|
||||||
|
|
||||||
let mandatory_param_names = mandatory_params.clone().map(|param| {
|
|
||||||
let (name, ..) = param_name(param);
|
let (name, ..) = param_name(param);
|
||||||
quote! { #name }
|
quote! { #name }
|
||||||
});
|
});
|
||||||
|
|
||||||
let mandatory_param_args_clone = mandatory_param_args.clone();
|
let mandatory_param_form_build = mandatory_params.iter().map(|param| {
|
||||||
let mandatory_param_form_build = mandatory_params.map(|param| {
|
|
||||||
let (name, name_as_str) = param_name(param);
|
let (name, name_as_str) = param_name(param);
|
||||||
quote! { let form = form.text(#name_as_str, #name.to_string()); }
|
quote! { let form = form.text(#name_as_str, #name.to_string()); }
|
||||||
});
|
});
|
||||||
|
@ -56,44 +37,21 @@ pub fn create_method_with_params(
|
||||||
let optional_params = params
|
let optional_params = params
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|param| param.get_type_info().is_optional)
|
.filter(|param| param.get_type_info().is_optional)
|
||||||
.map(|param| {
|
.map(generate_optional_parameter);
|
||||||
let n = ¶m.get_type_info().name;
|
|
||||||
let name = util::to_ident(&n.to_snake());
|
|
||||||
let t = util::to_ident(¶m.to_borrowed_type());
|
|
||||||
|
|
||||||
let builder_param = if param.should_borrow() {
|
|
||||||
quote! { &#t }
|
|
||||||
} else {
|
|
||||||
quote! { #t }
|
|
||||||
};
|
|
||||||
|
|
||||||
util::add_docs(
|
|
||||||
¶m.get_type_info().description,
|
|
||||||
quote! {
|
|
||||||
pub fn #name(mut self, value: #builder_param) -> Self {
|
|
||||||
self.form = self.form.text(#n, value.to_string());
|
|
||||||
self
|
|
||||||
}
|
|
||||||
},
|
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
let group_name = util::to_ident(&group.name.to_camel());
|
let group_name = util::to_ident(&group.name.to_camel());
|
||||||
let send_builder =
|
let send_builder =
|
||||||
MethodBuilder::new(&util::to_ident("send"), url, quote! { self.group.auth }).with_form();
|
MethodBuilder::new(&util::to_ident("send"), url, quote! { self.group.auth }).with_form();
|
||||||
|
|
||||||
let send_new_method = quote! {
|
|
||||||
fn new(group: &'a #group_name, #(#mandatory_param_args),*) -> Self {
|
|
||||||
let form = reqwest::multipart::Form::new();
|
|
||||||
#(#mandatory_param_form_build)*
|
|
||||||
Self { group, form }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let generate_send_impl = |send_method: proc_macro2::TokenStream| {
|
let generate_send_impl = |send_method: proc_macro2::TokenStream| {
|
||||||
quote! {
|
quote! {
|
||||||
impl<'a> #parameter_type<'a> {
|
impl<'a> #parameter_type<'a> {
|
||||||
#send_new_method
|
fn new(group: &'a #group_name, #(#mandatory_param_args),*) -> Self {
|
||||||
|
let form = reqwest::multipart::Form::new();
|
||||||
|
#(#mandatory_param_form_build)*
|
||||||
|
Self { group, form }
|
||||||
|
}
|
||||||
|
|
||||||
#(#optional_params)*
|
#(#optional_params)*
|
||||||
#send_method
|
#send_method
|
||||||
}
|
}
|
||||||
|
@ -116,7 +74,7 @@ pub fn create_method_with_params(
|
||||||
util::add_docs(
|
util::add_docs(
|
||||||
&method.description,
|
&method.description,
|
||||||
quote! {
|
quote! {
|
||||||
pub fn #method_name(&self, #(#mandatory_param_args_clone),*) -> #parameter_type {
|
pub fn #method_name(&self, #(#mandatory_param_args),*) -> #parameter_type {
|
||||||
#parameter_type::new(self, #(#mandatory_param_names),*)
|
#parameter_type::new(self, #(#mandatory_param_names),*)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -131,3 +89,48 @@ pub fn create_method_with_params(
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn mandatory_params(params: &[types::Type]) -> Vec<&types::Type> {
|
||||||
|
params
|
||||||
|
.iter()
|
||||||
|
.filter(|param| !param.get_type_info().is_optional)
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate_optional_parameter(param: &types::Type) -> proc_macro2::TokenStream {
|
||||||
|
let n = ¶m.get_type_info().name;
|
||||||
|
let name = util::to_ident(&n.to_snake());
|
||||||
|
let t = util::to_ident(¶m.to_borrowed_type());
|
||||||
|
let builder_param = if param.should_borrow() {
|
||||||
|
quote! { &#t }
|
||||||
|
} else {
|
||||||
|
quote! { #t }
|
||||||
|
};
|
||||||
|
util::add_docs(
|
||||||
|
¶m.get_type_info().description,
|
||||||
|
quote! {
|
||||||
|
pub fn #name(mut self, value: #builder_param) -> Self {
|
||||||
|
self.form = self.form.text(#n, value.to_string());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn param_name(param: &types::Type) -> (proc_macro2::Ident, String) {
|
||||||
|
let name_as_str = param.get_type_info().name.to_snake();
|
||||||
|
(util::to_ident(&name_as_str), name_as_str)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn param_with_name(param: &types::Type) -> proc_macro2::TokenStream {
|
||||||
|
let t = util::to_ident(¶m.to_borrowed_type());
|
||||||
|
|
||||||
|
let (name, ..) = param_name(param);
|
||||||
|
let t = if param.should_borrow() {
|
||||||
|
quote! { &#t }
|
||||||
|
} else {
|
||||||
|
quote! { #t }
|
||||||
|
};
|
||||||
|
|
||||||
|
quote! { #name: #t }
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user