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