use proc_macro2::{Group, TokenStream, TokenTree}; pub(crate) fn sync(input: TokenStream) -> TokenStream { let mut output = TokenStream::new(); let mut tokens = input.into_iter().peekable(); while let Some(token) = tokens.next() { match token { TokenTree::Group(group) => { let mut replacement = Group::new(group.delimiter(), sync(group.stream())); replacement.set_span(group.span()); output.extend([TokenTree::Group(replacement)]); } TokenTree::Ident(ident) if ident == "async" => { if matches!(tokens.peek(), Some(TokenTree::Ident(ident)) if ident == "move") { let move_token = tokens.next(); if matches!(tokens.peek(), Some(TokenTree::Punct(punct)) if punct.as_char() == '|') { output.extend(move_token); } } } TokenTree::Punct(punct) if punct.as_char() == '.' && matches!(tokens.peek(), Some(TokenTree::Ident(ident)) if ident == "await") => { tokens.next(); } token => output.extend([token]), } } output}
use proc_macro2::{Group, TokenStream, TokenTree};
pub(crate) fn sync(input: TokenStream) -> TokenStream {
let mut output = TokenStream::new();
let mut tokens = input.into_iter().peekable();
while let Some(token) = tokens.next() {
match token {
TokenTree::Group(group) => {
let mut replacement = Group::new(group.delimiter(), sync(group.stream()));
replacement.set_span(group.span());
output.extend([TokenTree::Group(replacement)]);
}
TokenTree::Ident(ident) if ident == "async" => {
if matches!(tokens.peek(), Some(TokenTree::Ident(ident)) if ident == "move") {
let move_token = tokens.next();
if matches!(tokens.peek(), Some(TokenTree::Punct(punct)) if punct.as_char() == '|') {
output.extend(move_token);
}
}
}
TokenTree::Punct(punct)
if punct.as_char() == '.'
&& matches!(tokens.peek(), Some(TokenTree::Ident(ident)) if ident == "await") =>
{
tokens.next();
}
token => output.extend([token]),
}
}
output
}