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 span = real_group.span();
let delimeter = real_group.delimiter();
let mut allts: Vec<TokenTree2> = real_group.stream().into_iter().collect();
let result = next(allts.iter_mut());
let mut ngroup = Group::new(delimeter, TokenStream2::from_iter(allts));
ngroup.set_span(span);
*real_group = ngroup;
result
}
pub fn replace_tree_in_stream<R>(
stream: &mut TokenStream2,
next: impl FnOnce(IterMut<'_, TokenTree2>) -> R,
) -> R {
let mut allts: Vec<TokenTree2> = core::mem::take(stream).into_iter().collect();
let result = next(allts.iter_mut());
*stream = TokenStream2::from_iter(allts);
result
}