PkmnLib_rs/src/utils/vec_ext.rs

37 lines
1.2 KiB
Rust

use crate::PkmnError;
use anyhow::Result;
/// Extension trait for `Vec` and `[T]` to provide common helper methods.
pub trait VecExt<T> {
/// Get a mutable reference to an element in the vector, or return an error if the index is out of bounds.
fn get_mut_res(&mut self, index: usize) -> Result<&mut T>;
/// Get a reference to an element in the vector, or return an error if the index is out of bounds.
fn get_res(&self, index: usize) -> Result<&T>;
}
impl<T> VecExt<T> for [T] {
fn get_mut_res(&mut self, index: usize) -> Result<&mut T> {
let len = self.len();
self.get_mut(index)
.ok_or(PkmnError::IndexOutOfBounds { index, len }.into())
}
fn get_res(&self, index: usize) -> Result<&T> {
self.get(index)
.ok_or(PkmnError::IndexOutOfBounds { index, len: self.len() }.into())
}
}
impl<T> VecExt<T> for Vec<T> {
fn get_mut_res(&mut self, index: usize) -> Result<&mut T> {
let len = self.len();
self.get_mut(index)
.ok_or(PkmnError::IndexOutOfBounds { index, len }.into())
}
fn get_res(&self, index: usize) -> Result<&T> {
self.get(index)
.ok_or(PkmnError::IndexOutOfBounds { index, len: self.len() }.into())
}
}