bon_macros/util/
fn_arg.rs

1pub(crate) trait FnArgExt {
2    fn attrs_mut(&mut self) -> &mut Vec<syn::Attribute>;
3    fn ty_mut(&mut self) -> &mut syn::Type;
4    fn as_receiver(&self) -> Option<&syn::Receiver>;
5    fn as_typed(&self) -> Option<&syn::PatType>;
6}
7
8impl FnArgExt for syn::FnArg {
9    fn attrs_mut(&mut self) -> &mut Vec<syn::Attribute> {
10        match self {
11            Self::Receiver(arg) => &mut arg.attrs,
12            Self::Typed(arg) => &mut arg.attrs,
13        }
14    }
15
16    fn ty_mut(&mut self) -> &mut syn::Type {
17        match self {
18            Self::Receiver(arg) => &mut arg.ty,
19            Self::Typed(arg) => &mut arg.ty,
20        }
21    }
22
23    fn as_receiver(&self) -> Option<&syn::Receiver> {
24        match self {
25            Self::Typed(_) => None,
26            Self::Receiver(arg) => Some(arg),
27        }
28    }
29
30    fn as_typed(&self) -> Option<&syn::PatType> {
31        match self {
32            Self::Typed(arg) => Some(arg),
33            Self::Receiver(_) => None,
34        }
35    }
36}