summaryrefslogtreecommitdiff
path: root/crates/system_action/src/action.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-10-06 02:16:34 +0800
committerGitHub <noreply@github.com>2025-10-06 02:16:34 +0800
commit57959d26c68dc1d403f527f1f8b407abe8059a28 (patch)
tree067fc31a7e5ef70ff764604cb67521ff88591f2e /crates/system_action/src/action.rs
parentc053e24c62890003aba84191e332211647f96eae (diff)
parent364dde0f168c0798187dd7113764d98e5b5a861d (diff)
Merge pull request #16 from JustEnoughVCS/jvcs_dev
Jvcs dev
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
+ }
+}