summaryrefslogtreecommitdiff
path: root/crates/system_action/src/action.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/system_action/src/action.rs')
-rw-r--r--crates/system_action/src/action.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/crates/system_action/src/action.rs b/crates/system_action/src/action.rs
new file mode 100644
index 0000000..14f1148
--- /dev/null
+++ b/crates/system_action/src/action.rs
@@ -0,0 +1,38 @@
+use tcp_connection::{error::TcpTargetError, instance::ConnectionInstance};
+
+pub trait Action<Args, Return> {
+ fn action_name() -> &'static str;
+
+ fn is_remote_action() -> bool;
+
+ fn process(
+ context: ActionContext,
+ args: Args,
+ ) -> impl std::future::Future<Output = Result<Return, TcpTargetError>> + Send;
+}
+
+pub struct ActionContext {
+ // Whether the action is executed locally or remotely
+ local: bool,
+
+ /// The connection instance in the current context,
+ /// used to interact with the machine on the other end
+ instance: ConnectionInstance,
+}
+
+impl ActionContext {
+ /// Whether the action is executed locally
+ pub fn is_local(&self) -> bool {
+ self.local
+ }
+
+ /// Whether the action is executed remotely
+ pub fn is_remote(&self) -> bool {
+ !self.local
+ }
+
+ /// Get the connection instance in the current context
+ pub fn instance(&self) -> &ConnectionInstance {
+ &self.instance
+ }
+}