use super::{Act, Info, Obs, Step};
use crate::record::Record;
use anyhow::Result;
pub trait Env {
type Config: Clone;
type Obs: Obs;
type Act: Act;
type Info: Info;
fn build(config: &Self::Config, seed: i64) -> Result<Self>
where
Self: Sized;
fn step(&mut self, a: &Self::Act) -> (Step<Self>, Record)
where
Self: Sized;
fn reset(&mut self, is_done: Option<&Vec<i8>>) -> Result<Self::Obs>;
fn step_with_reset(&mut self, a: &Self::Act) -> (Step<Self>, Record)
where
Self: Sized;
}