macros.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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 {
  7. &self.items
  8. }
  9. }
  10. impl std::ops::DerefMut for $target {
  11. fn deref_mut(&mut self) -> &mut Self::Target {
  12. &mut self.items
  13. }
  14. }
  15. impl $target {
  16. #[allow(dead_code)]
  17. pub fn into_inner(self) -> Vec<$item> {
  18. self.items
  19. }
  20. #[allow(dead_code)]
  21. pub fn push(&mut self, item: $item) {
  22. if self.items.contains(&item) {
  23. log::error!("add duplicate item: {:?}", item);
  24. return;
  25. }
  26. self.items.push(item);
  27. }
  28. #[allow(dead_code)]
  29. pub fn take_items(&mut self) -> Vec<$item> {
  30. std::mem::take(&mut self.items)
  31. }
  32. pub fn first_or_crash(&self) -> &$item {
  33. self.items.first().unwrap()
  34. }
  35. }
  36. };
  37. }