summaryrefslogtreecommitdiff
path: root/crates/system_action/src/action.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-10-06 02:14:03 +0800
committer魏曹先生 <1992414357@qq.com>2025-10-06 02:14:03 +0800
commitc4b6bcb0870d17c91afa0b0f4a9d8020bbf8208a (patch)
treeb1843e93d729bb7cb1faaf2f109b8cae2cbb2271 /crates/system_action/src/action.rs
parent84d3bf9fcc704e63ebc78723e988eb2a3552b243 (diff)
Rename vcs_service to action_system for better naming clarity
- Create new action_system crate with action framework - Create action_system_macros crate for procedural macros - Update vcs crate dependencies to use action_system - Maintain same functionality with improved naming
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
+ }
+}