collectivity 3.2.2

Generic collection traits
Documentation
use collectivity::Get;
use core::marker::PhantomData;
use std::collections::HashSet;

pub struct Multiplier<'a, K, C: 'a + Get<K, Value<'a> = &'a usize>> {
  data: C,
  mul: usize,
  k: PhantomData<K>,
  l: PhantomData<&'a C>,
}

impl<'a, K, C: 'a + Get<K, Value<'a> = &'a usize>> Multiplier<'a, K, C> {
  pub fn new(data: C, mul: usize) -> Self {
    Self {
      data,
      mul,
      k: PhantomData,
      l: PhantomData,
    }
  }
  pub fn get(&'a self, k: K) -> Option<usize> {
    self.data.get(k).map(|v| v * self.mul)
  }
}

fn main() {
  let vec_mul = Multiplier::new(vec![1, 2, 3], 2);
  assert_eq!(vec_mul.get(0), Some(2));
  assert_eq!(vec_mul.get(2), Some(6));
  let vec_mul = Multiplier::new(vec![1, 2, 3], 2);
  assert_eq!(vec_mul.get(&0), Some(2));
  assert_eq!(vec_mul.get(&2), Some(6));
  let mut hset = HashSet::new();
  hset.insert(5);
  let hset_mul = Multiplier::new(hset, 2);
  assert_eq!(hset_mul.get(&5), Some(10));
  assert_eq!(hset_mul.get(&10), None);
}