diff --git a/src/executor.rs b/src/executor.rs index 31df8ff..5a51205 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -1,3 +1,8 @@ +//! ## Executor +//! +//! This module contains the definition of an [`Executor`], used to run an [`Algorithm`] and have a graphical output in the terminal. +//! This type is supposed to be created using the builder pattern (c.f. [`Executor`]`::build`). + use std::{ collections::{HashMap, HashSet}, thread, diff --git a/src/executor/builder.rs b/src/executor/builder.rs index 2be41d3..58bea23 100644 --- a/src/executor/builder.rs +++ b/src/executor/builder.rs @@ -8,6 +8,7 @@ pub mod maze_state { use crate::{labyrinth::generator::MazeGenerator, Maze}; + /// Describe the state of the [`Maze`] parameter in the builder of an [`crate::Executor`]. Not ment to be implemented. pub trait MazeState {} pub trait BuildableMazeState: MazeState { fn get(self) -> Maze; @@ -55,6 +56,8 @@ pub mod maze_state { } } } + +/// Builder for an [`crate::Executor`], needs at least a [`Maze`]. pub struct ExecutorBuilder where MS: MazeState, @@ -63,7 +66,7 @@ where delay: Duration, } -pub fn new_builder() -> ExecutorBuilder { +pub(crate) fn new_builder() -> ExecutorBuilder { ExecutorBuilder { maze_state: Unprovided, delay: Duration::from_millis(100), @@ -71,6 +74,7 @@ pub fn new_builder() -> ExecutorBuilder { } impl ExecutorBuilder { + /// Provide a specific [`Maze`] for the execution. pub fn maze(self, maze: Maze) -> ExecutorBuilder { let Self { delay, @@ -81,6 +85,8 @@ impl ExecutorBuilder { maze_state: Provided::new(maze), } } + + /// Provide a generator to generate a [`Maze`] for the execution. pub fn generated(self, generator: G) -> ExecutorBuilder where G: MazeGenerator + 'static, @@ -94,6 +100,8 @@ impl ExecutorBuilder { maze_state: Generated::new(generator), } } + + /// Sets the delay between terminal redraws, default is 100ms. pub fn delay_ms(self, delay: u64) -> Self { let delay = Duration::from_millis(delay); let Self { @@ -105,7 +113,7 @@ impl ExecutorBuilder { } impl ExecutorBuilder { - pub fn build(self) -> (Maze, Duration) { + pub(crate) fn build(self) -> (Maze, Duration) { let maze = self.maze_state.get(); let delay = self.delay; (maze, delay)