use alloc::vec::Vec;
use core::slice::IterMut;
use proc_macro2::{Group, TokenStream as TokenStream2, TokenTree as TokenTree2};
pub fn replace_tree_in_group<R>(
real_group: &mut Group,
next: impl FnOnce(IterMut<'_, TokenTree2>) -> R,
) -> R {
let mut tokens: Vec<TokenTree2> = real_group.stream().into_iter().collect();
let result = next(tokens.iter_mut());
let mut new_group = Group::new(real_group.delimiter(), TokenStream2::from_iter(tokens));
new_group.set_span(real_group.span());
*real_group = new_group;
result
}
pub fn replace_tree_in_stream<R>(
stream: &mut TokenStream2,
next: impl FnOnce(IterMut<'_, TokenTree2>) -> R,
) -> R {
let mut tokens: Vec<TokenTree2> = std::mem::take(stream).into_iter().collect();
let result = next(tokens.iter_mut());
*stream = TokenStream2::from_iter(tokens);
result
}