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