use bevy_ecs::{prelude::In, query::QueryEntityError};
use smallvec::SmallVec;
use crate::{BufferAccessMut, BufferKey};
pub(super) fn consume_buffer<const N: usize, T>(
In(key): In<BufferKey<T>>,
mut access: BufferAccessMut<T>,
) -> SmallVec<[T; N]>
where
T: 'static + Send + Sync,
{
let Ok(mut buffer) = access.get_mut(&key) else {
return SmallVec::new();
};
buffer.drain(..).collect()
}
pub fn push_into_buffer<T: 'static + Send + Sync>(
In((input, key)): In<(T, BufferKey<T>)>,
mut access: BufferAccessMut<T>,
) -> Result<(), QueryEntityError> {
access.get_mut(&key)?.push(input);
Ok(())
}