macros.rs 938 B

123456789101112131415161718192021222324252627282930
  1. #[macro_export]
  2. macro_rules! impl_def_and_def_mut {
  3. ($target:ident, $item: ident) => {
  4. impl std::ops::Deref for $target {
  5. type Target = Vec<$item>;
  6. fn deref(&self) -> &Self::Target { &self.items }
  7. }
  8. impl std::ops::DerefMut for $target {
  9. fn deref_mut(&mut self) -> &mut Self::Target { &mut self.items }
  10. }
  11. impl $target {
  12. #[allow(dead_code)]
  13. pub fn into_inner(&mut self) -> Vec<$item> { ::std::mem::replace(&mut self.items, vec![]) }
  14. #[allow(dead_code)]
  15. pub fn push(&mut self, item: $item) {
  16. if self.items.contains(&item) {
  17. log::error!("add duplicate item: {:?}", item);
  18. return;
  19. }
  20. self.items.push(item);
  21. }
  22. pub fn first_or_crash(&self) -> &$item { self.items.first().unwrap() }
  23. }
  24. };
  25. }