cgp_component_macro_lib/derive_component/
replace_self_receiver.rs1use proc_macro2::Ident;
2use syn::{parse_quote, FnArg, TraitItemFn};
3
4use crate::derive_component::snake_case::to_snake_case_ident;
5
6pub fn replace_self_receiver(func: &mut TraitItemFn, replaced_type: &Ident) {
7 if let Some(arg) = func.sig.inputs.first_mut() {
8 if let FnArg::Receiver(receiver) = arg {
9 let replaced_var = to_snake_case_ident(replaced_type);
10
11 match (&receiver.reference, &receiver.mutability) {
12 (None, None) => {
13 *arg = parse_quote!(#replaced_var : #replaced_type);
14 }
15 (Some((_and, None)), None) => {
16 *arg = parse_quote!(#replaced_var : & #replaced_type);
17 }
18 (Some((_and, Some(life))), None) => {
19 *arg = parse_quote!(#replaced_var : & #life #replaced_type);
20 }
21 (Some((_and, None)), Some(_mut)) => {
22 *arg = parse_quote!(#replaced_var : &mut #replaced_type);
23 }
24 (Some((_and, Some(life))), Some(_mut)) => {
25 *arg = parse_quote!(#replaced_var : & #life mut #replaced_type);
26 }
27 _ => {}
28 }
29 }
30 }
31}