added documentation

This commit is contained in:
JOLIMAITRE Matthieu 2022-05-30 02:10:33 +03:00
parent b21dc88b68
commit 31f2e25cdc
2 changed files with 15 additions and 2 deletions

View file

@ -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::{ use std::{
collections::{HashMap, HashSet}, collections::{HashMap, HashSet},
thread, thread,

View file

@ -8,6 +8,7 @@ pub mod maze_state {
use crate::{labyrinth::generator::MazeGenerator, Maze}; 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 MazeState {}
pub trait BuildableMazeState: MazeState { pub trait BuildableMazeState: MazeState {
fn get(self) -> Maze; 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<MS> pub struct ExecutorBuilder<MS>
where where
MS: MazeState, MS: MazeState,
@ -63,7 +66,7 @@ where
delay: Duration, delay: Duration,
} }
pub fn new_builder() -> ExecutorBuilder<Unprovided> { pub(crate) fn new_builder() -> ExecutorBuilder<Unprovided> {
ExecutorBuilder { ExecutorBuilder {
maze_state: Unprovided, maze_state: Unprovided,
delay: Duration::from_millis(100), delay: Duration::from_millis(100),
@ -71,6 +74,7 @@ pub fn new_builder() -> ExecutorBuilder<Unprovided> {
} }
impl<MS: MazeState> ExecutorBuilder<MS> { impl<MS: MazeState> ExecutorBuilder<MS> {
/// Provide a specific [`Maze`] for the execution.
pub fn maze(self, maze: Maze) -> ExecutorBuilder<Provided> { pub fn maze(self, maze: Maze) -> ExecutorBuilder<Provided> {
let Self { let Self {
delay, delay,
@ -81,6 +85,8 @@ impl<MS: MazeState> ExecutorBuilder<MS> {
maze_state: Provided::new(maze), maze_state: Provided::new(maze),
} }
} }
/// Provide a generator to generate a [`Maze`] for the execution.
pub fn generated<G>(self, generator: G) -> ExecutorBuilder<Generated> pub fn generated<G>(self, generator: G) -> ExecutorBuilder<Generated>
where where
G: MazeGenerator + 'static, G: MazeGenerator + 'static,
@ -94,6 +100,8 @@ impl<MS: MazeState> ExecutorBuilder<MS> {
maze_state: Generated::new(generator), maze_state: Generated::new(generator),
} }
} }
/// Sets the delay between terminal redraws, default is 100ms.
pub fn delay_ms(self, delay: u64) -> Self { pub fn delay_ms(self, delay: u64) -> Self {
let delay = Duration::from_millis(delay); let delay = Duration::from_millis(delay);
let Self { let Self {
@ -105,7 +113,7 @@ impl<MS: MazeState> ExecutorBuilder<MS> {
} }
impl<MS: BuildableMazeState> ExecutorBuilder<MS> { impl<MS: BuildableMazeState> ExecutorBuilder<MS> {
pub fn build(self) -> (Maze, Duration) { pub(crate) fn build(self) -> (Maze, Duration) {
let maze = self.maze_state.get(); let maze = self.maze_state.get();
let delay = self.delay; let delay = self.delay;
(maze, delay) (maze, delay)