added better builder for executor
This commit is contained in:
parent
ee59d342a1
commit
a7ce6ffb56
4 changed files with 93 additions and 8 deletions
57
src/executor/builder.rs
Normal file
57
src/executor/builder.rs
Normal 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)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue