use proc_macro2::TokenStream;
use quote::quote;
use syn::FnArg;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum ReceiverKind {
Ref,
Mut,
None,
}
pub fn determine_receiver(
inputs: &syn::punctuated::Punctuated<FnArg, syn::token::Comma>,
) -> ReceiverKind {
for input in inputs {
if let FnArg::Receiver(recv) = input {
return if recv.mutability.is_some() {
ReceiverKind::Mut
} else {
ReceiverKind::Ref
};
}
}
ReceiverKind::None
}
pub fn registry_access_for(recv: ReceiverKind) -> TokenStream {
match recv {
ReceiverKind::Ref => quote! {
let context = match registry.get(context_id) { Some(c) => c, None => return Default::default() };
},
ReceiverKind::Mut => quote! {
let context = match registry.get_mut(context_id) { Some(c) => c, None => return Default::default() };
},
ReceiverKind::None => quote! {},
}
}