1use proc_macro2::TokenStream;
2use quote::quote;
3
4pub enum Operand {
5    Borrowed(TokenStream),
6    Owned(TokenStream),
7}
8
9pub use self::Operand::*;
10
11impl Operand {
12    pub fn tokens(&self) -> &TokenStream {
13        match self {
14            Borrowed(n) | Owned(n) => n,
15        }
16    }
17
18    pub fn ref_tokens(&self) -> TokenStream {
19        match self {
20            Borrowed(n) => n.clone(),
21            Owned(n) => quote!(&#n),
22        }
23    }
24
25    pub fn ref_mut_tokens(&self) -> TokenStream {
26        match self {
27            Borrowed(n) => n.clone(),
28            Owned(n) => quote!(&mut #n),
29        }
30    }
31
32    pub fn owned_tokens(&self) -> TokenStream {
33        match self {
34            Borrowed(n) => quote!(*#n),
35            Owned(n) => n.clone(),
36        }
37    }
38}
39