diff options
| author | 魏曹先生 <1992414357@qq.com> | 2025-10-06 02:01:04 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2025-10-06 02:01:04 +0800 |
| commit | dc9ad9028b58597cee87eef2f6647e7149cfc278 (patch) | |
| tree | 602d54fb261721a599e45fc02506cfa719c03f70 /crates/service/src/action.rs | |
| parent | d6283f0964afcf093e4c53df3c05ac9af8e28596 (diff) | |
Add service module with macros and action framework
- Create new vcs_service crate for handling service actions
- Add vcs_service_macros crate for procedural macros
- Add vcs_test module with action framework integration
- Implement Action and ActionPool traits for service operations
Diffstat (limited to 'crates/service/src/action.rs')
| -rw-r--r-- | crates/service/src/action.rs | 38 |
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 + } +} |
