docs: Invoker initial docs

This commit is contained in:
hakki 2024-10-31 09:17:58 +01:00 committed by mikolaj
parent ddbaf2abe5
commit aae99a9656
1 changed files with 22 additions and 0 deletions

View File

@ -27,46 +27,63 @@ use super::{
}; };
#[enum_dispatch] #[enum_dispatch]
/// Getter trait to obtain Navigation Mesh
pub trait GetMaybeNavmesh { pub trait GetMaybeNavmesh {
/// Returns navigation mesh if possible /// Returns navigation mesh if possible
fn maybe_navmesh(&self) -> Option<&Navmesh>; fn maybe_navmesh(&self) -> Option<&Navmesh>;
} }
#[enum_dispatch] #[enum_dispatch]
/// TODO: Trait to require Navigation Cord implementation details
pub trait GetMaybeNavcord { pub trait GetMaybeNavcord {
fn maybe_navcord(&self) -> Option<&NavcordStepper>; fn maybe_navcord(&self) -> Option<&NavcordStepper>;
} }
#[enum_dispatch] #[enum_dispatch]
/// TODO: Requires Ghosts implementations
pub trait GetGhosts { pub trait GetGhosts {
/// Retrieves the ghosts associated with the execution.
fn ghosts(&self) -> &[PrimitiveShape]; fn ghosts(&self) -> &[PrimitiveShape];
} }
#[enum_dispatch] #[enum_dispatch]
/// TODO: Defines Obstacles getter implementation
pub trait GetObstacles { pub trait GetObstacles {
/// Returns possible obstacles
fn obstacles(&self) -> &[PrimitiveIndex]; fn obstacles(&self) -> &[PrimitiveIndex];
} }
/// Error types that can occur during the invocation of commands
#[derive(Error, Debug, Clone)] #[derive(Error, Debug, Clone)]
pub enum InvokerError { pub enum InvokerError {
/// Wraps errors related to command history operations
#[error(transparent)] #[error(transparent)]
History(#[from] HistoryError), History(#[from] HistoryError),
/// Wraps errors related to autorouter operations
#[error(transparent)] #[error(transparent)]
Autorouter(#[from] AutorouterError), Autorouter(#[from] AutorouterError),
} }
#[derive(Getters, Dissolve)] #[derive(Getters, Dissolve)]
/// Structure that manages the execution of commands within the autorouting system
pub struct Invoker<M: AccessMesadata> { pub struct Invoker<M: AccessMesadata> {
/// The structure instance used for executing commands
pub(super) autorouter: Autorouter<M>, pub(super) autorouter: Autorouter<M>,
/// History of executed commands
pub(super) history: History, pub(super) history: History,
/// Currently executed command.
pub(super) ongoing_command: Option<Command>, pub(super) ongoing_command: Option<Command>,
} }
impl<M: AccessMesadata> Invoker<M> { impl<M: AccessMesadata> Invoker<M> {
/// Creates a new instance of Invoker with the given autorouter instance
pub fn new(autorouter: Autorouter<M>) -> Self { pub fn new(autorouter: Autorouter<M>) -> Self {
Self::new_with_history(autorouter, History::new()) Self::new_with_history(autorouter, History::new())
} }
/// Creates a new instance of Invoker with the given autorouter and history
pub fn new_with_history(autorouter: Autorouter<M>, history: History) -> Self { pub fn new_with_history(autorouter: Autorouter<M>, history: History) -> Self {
Self { Self {
autorouter, autorouter,
@ -76,6 +93,7 @@ impl<M: AccessMesadata> Invoker<M> {
} }
//#[debug_requires(self.ongoing_command.is_none())] //#[debug_requires(self.ongoing_command.is_none())]
/// Executes a command, managing the command status and history
pub fn execute(&mut self, command: Command) -> Result<(), InvokerError> { pub fn execute(&mut self, command: Command) -> Result<(), InvokerError> {
let mut execute = self.execute_stepper(command)?; let mut execute = self.execute_stepper(command)?;
@ -90,6 +108,7 @@ impl<M: AccessMesadata> Invoker<M> {
} }
#[debug_requires(self.ongoing_command.is_none())] #[debug_requires(self.ongoing_command.is_none())]
/// Pass given command to be executed
pub fn execute_stepper(&mut self, command: Command) -> Result<ExecutionStepper, InvokerError> { pub fn execute_stepper(&mut self, command: Command) -> Result<ExecutionStepper, InvokerError> {
let execute = self.dispatch_command(&command); let execute = self.dispatch_command(&command);
self.ongoing_command = Some(command); self.ongoing_command = Some(command);
@ -134,6 +153,7 @@ impl<M: AccessMesadata> Invoker<M> {
} }
#[debug_requires(self.ongoing_command.is_none())] #[debug_requires(self.ongoing_command.is_none())]
/// Undo last command
pub fn undo(&mut self) -> Result<(), InvokerError> { pub fn undo(&mut self) -> Result<(), InvokerError> {
let command = self.history.last_done()?; let command = self.history.last_done()?;
@ -155,6 +175,7 @@ impl<M: AccessMesadata> Invoker<M> {
} }
//#[debug_requires(self.ongoing.is_none())] //#[debug_requires(self.ongoing.is_none())]
/// Redo last command
pub fn redo(&mut self) -> Result<(), InvokerError> { pub fn redo(&mut self) -> Result<(), InvokerError> {
let command = self.history.last_undone()?.clone(); let command = self.history.last_undone()?.clone();
let mut execute = self.execute_stepper(command)?; let mut execute = self.execute_stepper(command)?;
@ -172,6 +193,7 @@ impl<M: AccessMesadata> Invoker<M> {
} }
#[debug_requires(self.ongoing_command.is_none())] #[debug_requires(self.ongoing_command.is_none())]
/// Replay last command
pub fn replay(&mut self, history: History) { pub fn replay(&mut self, history: History) {
let (done, undone) = history.dissolve(); let (done, undone) = history.dissolve();