summaryrefslogtreecommitdiff
path: root/crates/service/src/action.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-10-06 02:03:23 +0800
committerGitHub <noreply@github.com>2025-10-06 02:03:23 +0800
commitc053e24c62890003aba84191e332211647f96eae (patch)
tree3d2e506b32ca7cb32729f04a91304803e8ed3326 /crates/service/src/action.rs
parent50b801a11e1c3bb3012ac189197b7e84663ba902 (diff)
parentbbb2b506e8f5ea7aae2b1365a75db9274f860f81 (diff)
Merge pull request #15 from JustEnoughVCS/jvcs_dev
Jvcs dev
Diffstat (limited to 'crates/service/src/action.rs')
-rw-r--r--crates/service/src/action.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/crates/service/src/action.rs b/crates/service/src/action.rs
new file mode 100644
index 0000000..14f1148
--- /dev/null
+++ b/crates/service/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
+ }
+}