added better builder for executor

This commit is contained in:
JOLIMAITRE Matthieu 2022-05-30 01:38:13 +03:00
parent ee59d342a1
commit a7ce6ffb56
4 changed files with 93 additions and 8 deletions

57
src/executor/builder.rs Normal file
View file

@ -0,0 +1,57 @@
use std::time::Duration;
use crate::{labyrinth::generator::MazeGenerator, Maze};
pub trait MazeState {}
pub trait BuildableMazeState: MazeState {
fn get(self) -> Maze;
}
pub struct Unprovided;
impl MazeState for Unprovided {}
struct Provided {
maze: Maze,
}
impl MazeState for Provided {}
impl BuildableMazeState for Provided {
fn get(self) -> Maze {
self.maze
}
}
struct Generated {
generator: Box<dyn MazeGenerator>,
}
impl MazeState for Generated {}
impl BuildableMazeState for Generated {
fn get(mut self) -> Maze {
self.generator.generate()
}
}
pub struct ExecutorBuilder<MS>
where
MS: MazeState,
{
maze_state: MS,
delay: Duration,
}
pub fn new_builder() -> ExecutorBuilder<Unprovided> {
ExecutorBuilder {
maze_state: Unprovided,
delay: Duration::from_millis(100),
}
}
impl<MS: BuildableMazeState> ExecutorBuilder<MS> {
pub fn build(self) -> (Maze, Duration) {
let maze = self.maze_state.get();
let delay = self.delay;
(maze, delay)
}
}