#[macro_export]
macro_rules! make_len {
() => {
fn len(&self) -> usize {
self.len()
}
};
}
#[macro_export]
macro_rules! make_is_empty {
() => {
fn is_empty(&self) -> bool {
self.is_empty()
}
};
}
#[macro_export]
macro_rules! make_get_all_items {
() => {
fn get_all_items(&self) -> Vec<&T> {
let mut all: Vec<&T> = Vec::new();
for item in self {
all.push(&item)
}
all
}
};
}
#[macro_export]
macro_rules! make_get_all_map_items {
() => {
fn get_all_items(&self) -> Vec<&V> {
self.values().collect::<Vec<&V>>()
}
};
}
#[macro_export]
macro_rules! make_array_to_vec {
() => {
fn to_vec(&self) -> Vec<T> {
self.to_vec()
}
};
}
#[macro_export]
macro_rules! make_map_to_vec {
() => {
fn to_vec(&self) -> Vec<V> {
self.values().cloned().collect()
}
};
}
#[macro_export]
macro_rules! make_vec_to_vec {
() => {
fn to_vec(&self) -> Vec<T> {
self.clone()
}
};
}
#[macro_export]
macro_rules! make_vec_deq_to_vec {
() => {
fn to_vec(&self) -> Vec<T> {
let mut v = Vec::with_capacity(self.len());
let mut deque = self.clone();
for item in deque.make_contiguous().iter() {
v.push(item.clone());
}
v
}
};
}
#[macro_export]
macro_rules! make_find_from_map_values {
() => {
fn get_item_by_id(&self, id: IdentificationValue) -> Option<&V> {
self.values().find(|item| item.id() == id)
}
};
}
#[macro_export]
macro_rules! make_find_from_iter_values {
() => {
fn get_item_by_id(&self, id: IdentificationValue) -> Option<&T> {
self.iter().find(|item| item.id() == id)
}
};
}
#[macro_export]
macro_rules! coord_match {
($index:expr, $( $i:literal => $val:expr ),+ $(,)?) => {{
match $index {
$(
$i => Ok($val),
)+
_ => Err(IndexError(format!(
"Coordinate index out of bounds: {}", $index
))),
}
}};
}