macro_rules! delegate_env {
($field:ident) => {
delegate_env!($field, render, close, render_mode, observation_space, action_space);
};
($field:ident, $($method:ident),+ $(,)?) => {
$(delegate_env!(@one $field, $method);)+
};
(@one $field:ident, render) => {
fn render(&mut self) -> $crate::error::Result<$crate::env::RenderFrame> {
self.$field.render()
}
};
(@one $field:ident, close) => {
fn close(&mut self) { self.$field.close(); }
};
(@one $field:ident, render_mode) => {
fn render_mode(&self) -> &$crate::env::RenderMode { self.$field.render_mode() }
};
(@one $field:ident, observation_space) => {
fn observation_space(&self) -> &Self::ObsSpace { self.$field.observation_space() }
};
(@one $field:ident, action_space) => {
fn action_space(&self) -> &Self::ActSpace { self.$field.action_space() }
};
(@one $field:ident, reset) => {
fn reset(
&mut self,
seed: Option<u64>,
) -> $crate::error::Result<$crate::env::ResetResult<Self::Obs>> {
self.$field.reset(seed)
}
};
}
pub(crate) use delegate_env;