cxxbridge_macro/
tokens.rs1use crate::syntax::Receiver;
2use proc_macro2::TokenStream;
3use quote::{quote_spanned, ToTokens};
4use syn::Token;
5
6pub(crate) struct ReceiverType<'a>(&'a Receiver);
7pub(crate) struct ReceiverTypeSelf<'a>(&'a Receiver);
8
9impl Receiver {
10 pub(crate) fn ty(&self) -> ReceiverType {
12 ReceiverType(self)
13 }
14
15 pub(crate) fn ty_self(&self) -> ReceiverTypeSelf {
17 ReceiverTypeSelf(self)
18 }
19}
20
21impl ToTokens for ReceiverType<'_> {
22 fn to_tokens(&self, tokens: &mut TokenStream) {
23 let Receiver {
24 pinned: _,
25 ampersand,
26 lifetime,
27 mutable: _,
28 var: _,
29 colon_token: _,
30 ty,
31 shorthand: _,
32 pin_tokens,
33 mutability,
34 } = &self.0;
35 if let Some((pin, langle, _rangle)) = pin_tokens {
36 tokens.extend(quote_spanned!(pin.span=> ::cxx::core::pin::Pin));
37 langle.to_tokens(tokens);
38 }
39 ampersand.to_tokens(tokens);
40 lifetime.to_tokens(tokens);
41 mutability.to_tokens(tokens);
42 ty.to_tokens(tokens);
43 if let Some((_pin, _langle, rangle)) = pin_tokens {
44 rangle.to_tokens(tokens);
45 }
46 }
47}
48
49impl ToTokens for ReceiverTypeSelf<'_> {
50 fn to_tokens(&self, tokens: &mut TokenStream) {
51 let Receiver {
52 pinned: _,
53 ampersand,
54 lifetime,
55 mutable: _,
56 var: _,
57 colon_token: _,
58 ty,
59 shorthand: _,
60 pin_tokens,
61 mutability,
62 } = &self.0;
63 if let Some((pin, langle, _rangle)) = pin_tokens {
64 tokens.extend(quote_spanned!(pin.span=> ::cxx::core::pin::Pin));
65 langle.to_tokens(tokens);
66 }
67 ampersand.to_tokens(tokens);
68 lifetime.to_tokens(tokens);
69 mutability.to_tokens(tokens);
70 Token).to_tokens(tokens);
71 if let Some((_pin, _langle, rangle)) = pin_tokens {
72 rangle.to_tokens(tokens);
73 }
74 }
75}