Skip to main content

clap_exec/
lib.rs

1pub use clap_exec_derive::*;
2
3#[derive(Debug, thiserror::Error)]
4pub enum RunnerError {
5	#[error("{0}")]
6	Custom(String),
7}
8
9pub trait Executable {
10	type UserState;
11	fn execute(&mut self, _state: &mut Self::UserState) -> Result<(), RunnerError>;
12}
13
14pub trait Runner: Executable {
15	fn before_global(&mut self, _state: &mut Self::UserState) -> Result<(), RunnerError> {
16		Ok(())
17	}
18
19	fn before(&mut self, _state: &mut Self::UserState) -> Result<(), RunnerError> {
20		Ok(())
21	}
22
23	fn run(&mut self, state: &mut Self::UserState) -> Result<(), RunnerError>;
24
25	fn after(&self, _state: &Self::UserState) -> Result<(), RunnerError> {
26		Ok(())
27	}
28
29	fn after_global(&self, _state: &Self::UserState) -> Result<(), RunnerError> {
30		Ok(())
31	}
32}
33
34pub trait ExecutableAsync {
35	type UserState: Send + Sync;
36	fn execute(&mut self, _state: &mut Self::UserState) -> impl Future<Output = Result<(), RunnerError>> + Send;
37}
38
39pub trait RunnerAsync: ExecutableAsync {
40	fn before_global(&mut self, _state: &mut Self::UserState) -> impl Future<Output = Result<(), RunnerError>> + Send {
41		async { Ok(()) }
42	}
43
44	fn before(&mut self, _state: &mut Self::UserState) -> impl Future<Output = Result<(), RunnerError>> + Send {
45		async { Ok(()) }
46	}
47
48	fn run(&mut self, state: &mut Self::UserState) -> impl Future<Output = Result<(), RunnerError>> + Send;
49
50	fn after(&self, _state: &Self::UserState) -> impl Future<Output = Result<(), RunnerError>> + Send {
51		async { Ok(()) }
52	}
53
54	fn after_global(&self, _state: &Self::UserState) -> impl Future<Output = Result<(), RunnerError>> + Send {
55		async { Ok(()) }
56	}
57}