use crate::env::{Env, RenderFrame, RenderMode, ResetResult, StepResult};
use crate::error::Result;
#[derive(Debug)]
pub struct Wrapper<E: Env> {
pub env: E,
}
impl<E: Env> Wrapper<E> {
#[must_use]
pub const fn new(env: E) -> Self {
Self { env }
}
#[must_use]
pub fn into_inner(self) -> E {
self.env
}
#[must_use]
pub const fn unwrapped(&self) -> &E {
&self.env
}
}
impl<E: Env> Env for Wrapper<E> {
type Obs = E::Obs;
type Act = E::Act;
type ObsSpace = E::ObsSpace;
type ActSpace = E::ActSpace;
fn step(&mut self, action: &Self::Act) -> Result<StepResult<Self::Obs>> {
self.env.step(action)
}
fn reset(&mut self, seed: Option<u64>) -> Result<ResetResult<Self::Obs>> {
self.env.reset(seed)
}
fn render(&mut self) -> Result<RenderFrame> {
self.env.render()
}
fn close(&mut self) {
self.env.close();
}
fn observation_space(&self) -> &Self::ObsSpace {
self.env.observation_space()
}
fn action_space(&self) -> &Self::ActSpace {
self.env.action_space()
}
fn render_mode(&self) -> &RenderMode {
self.env.render_mode()
}
}