37 lines
1.3 KiB
Rust
37 lines
1.3 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_else(|| PkmnError::IndexOutOfBounds { index, len }.into())
|
|
}
|
|
|
|
fn get_res(&self, index: usize) -> Result<&T> {
|
|
self.get(index)
|
|
.ok_or_else(|| 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_else(|| PkmnError::IndexOutOfBounds { index, len }.into())
|
|
}
|
|
|
|
fn get_res(&self, index: usize) -> Result<&T> {
|
|
self.get(index)
|
|
.ok_or_else(|| PkmnError::IndexOutOfBounds { index, len: self.len() }.into())
|
|
}
|
|
}
|