Quick macro to do newtype deref implementation
This commit is contained in:
parent
87912b25c4
commit
556ab5669d
@ -1,2 +1,22 @@
|
|||||||
pub mod grid;
|
pub mod grid;
|
||||||
pub use grid::*;
|
pub use grid::*;
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! deref {
|
||||||
|
($($struct: ty, $target: ty),* ) => {
|
||||||
|
$(
|
||||||
|
impl ::core::ops::Deref for $struct {
|
||||||
|
type Target = $target;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl ::core::ops::DerefMut for $struct {
|
||||||
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||||
|
&mut self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
use aoc_shared::deref;
|
||||||
use aoc_shared::grid::Grid as BaseGrid;
|
use aoc_shared::grid::Grid as BaseGrid;
|
||||||
use aoc_shared::grid::Grid2d;
|
use aoc_shared::grid::Grid2d;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::ops::{Deref, DerefMut};
|
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialOrd, PartialEq, Eq, Hash)]
|
#[derive(Debug, Copy, Clone, PartialOrd, PartialEq, Eq, Hash)]
|
||||||
enum VisibleDirection {
|
enum VisibleDirection {
|
||||||
@ -53,18 +53,7 @@ impl Tree {
|
|||||||
// 2. Implement the Deref trait for the wrapped struct
|
// 2. Implement the Deref trait for the wrapped struct
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Grid<T>(BaseGrid<T>);
|
pub struct Grid<T>(BaseGrid<T>);
|
||||||
impl<T> Deref for Grid<T> {
|
deref!(Grid<Tree>, BaseGrid<Tree>);
|
||||||
type Target = BaseGrid<T>;
|
|
||||||
|
|
||||||
fn deref(&self) -> &Self::Target {
|
|
||||||
&self.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl<T> DerefMut for Grid<T> {
|
|
||||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
|
||||||
&mut self.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Grid<Tree> {
|
impl Grid<Tree> {
|
||||||
pub fn new(width: usize) -> Self {
|
pub fn new(width: usize) -> Self {
|
||||||
|
Reference in New Issue
Block a user