use crate::selectable::SelectableItem;
use std::ops::Index;
pub struct RequestedItems<T> {
items: Vec<SelectableItem<T>>,
}
impl<T> RequestedItems<T> {
pub fn new() -> Self {
Self { items: Vec::new() }
}
pub fn from_vec(items: Vec<SelectableItem<T>>) -> Self {
Self { items }
}
pub fn push(&mut self, item: SelectableItem<T>) {
self.items.push(item);
}
pub fn len(&self) -> usize {
self.items.len()
}
pub fn is_empty(&self) -> bool {
self.items.is_empty()
}
pub fn iter(&self) -> std::slice::Iter<'_, SelectableItem<T>> {
self.items.iter()
}
pub fn iter_mut(&mut self) -> std::slice::IterMut<'_, SelectableItem<T>> {
self.items.iter_mut()
}
pub fn as_vec(&self) -> &Vec<SelectableItem<T>> {
&self.items
}
pub fn as_vec_mut(&mut self) -> &mut Vec<SelectableItem<T>> {
&mut self.items
}
pub fn clear(&mut self) {
self.items.clear();
}
}
impl<T> Default for RequestedItems<T> {
fn default() -> Self {
Self::new()
}
}
impl<T> IntoIterator for RequestedItems<T> {
type Item = SelectableItem<T>;
type IntoIter = std::vec::IntoIter<SelectableItem<T>>;
fn into_iter(self) -> Self::IntoIter {
self.items.into_iter()
}
}
impl<'a, T> IntoIterator for &'a RequestedItems<T> {
type Item = &'a SelectableItem<T>;
type IntoIter = std::slice::Iter<'a, SelectableItem<T>>;
fn into_iter(self) -> Self::IntoIter {
self.items.iter()
}
}
impl<'a, T> IntoIterator for &'a mut RequestedItems<T> {
type Item = &'a mut SelectableItem<T>;
type IntoIter = std::slice::IterMut<'a, SelectableItem<T>>;
fn into_iter(self) -> Self::IntoIter {
self.items.iter_mut()
}
}
impl<T> Index<usize> for RequestedItems<T> {
type Output = SelectableItem<T>;
fn index(&self, index: usize) -> &Self::Output {
&self.items[index]
}
}
impl<T> Extend<SelectableItem<T>> for RequestedItems<T> {
fn extend<I: IntoIterator<Item = SelectableItem<T>>>(&mut self, iter: I) {
self.items.extend(iter);
}
}