pub use otter::commands::{MgmtCommand, MgmtResponse};
pub use otter::commands::{MgmtGameInstruction, MgmtGameResponse};
pub use otter::commands::{MgmtGameUpdateMode};
-pub use otter::deref_to_field;
+pub use otter::{deref_to_field, deref_to_field_mut};
pub use otter::gamestate::{self, Generation, PlayerId};
pub use otter::global::InstanceName;
pub use otter::mgmtchannel::MgmtChannel;
#[macro_export]
macro_rules! deref_to_field {
- {$outer:ty, $inner:ty, $($field:tt)*} => {
- impl Deref for $outer {
+ {$({ $($gen:tt)* })? $outer:ty, $inner:ty, $($field:tt)*} => {
+ impl $(< $($gen)* >)? Deref for $outer {
type Target = $inner;
fn deref(&self) -> &$inner { &self.$($field)* }
}
}
#[macro_export]
macro_rules! deref_to_field_mut {
- {$outer:ty, $inner:ty, $($field:tt)*} => {
- deref_to_field!{$outer, $inner, $($field)*}
- impl DerefMut for $outer {
+ {$({ $($gen:tt)* })? $outer:ty, $inner:ty, $($field:tt)*} => {
+ deref_to_field!{ $({ $($gen)* })? $outer, $inner, $($field)*}
+ impl $(< $($gen)* >)? DerefMut for $outer {
fn deref_mut(&mut self) -> &mut $inner { &mut self.$($field)* }
}
}
final_hook: FinalInfoCollection,
windows_squirreled: Vec<String>, // see Drop impl
}
-
-impl Deref for Setup {
- type Target = SetupCore;
- fn deref(&self) -> &SetupCore { &self.core }
-}
-impl DerefMut for Setup {
- fn deref_mut(&mut self) -> &mut SetupCore { &mut self.core }
-}
+deref_to_field_mut!{Setup, SetupCore, core}
#[derive(Debug)]
pub struct Window {
w: &'g WindowGuard<'g>,
elem: t4::WebElement<'g>,
}
-
-impl<'g> Deref for PieceElement<'g> {
- type Target = t4::WebElement<'g>;
- fn deref<'i>(&'i self) -> &'i t4::WebElement<'g> { &self.elem }
-}
+deref_to_field!{{'g} PieceElement<'g>, t4::WebElement<'g>, elem}
impl<'g> PieceElement<'g> {
#[throws(AE)]