diff options
| author | 魏曹先生 <1992414357@qq.com> | 2025-10-06 17:20:19 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2025-10-06 17:20:19 +0800 |
| commit | a6f73176a51c3aaef5c16b7c9d6f4923c9557d67 (patch) | |
| tree | ce633bb4ba8a9351a2766b7a602039e94edb8900 | |
| parent | d9a39247012130723b3c023ea9cdbe37d89f6f58 (diff) | |
feat: add default implementation and convenience methods to ActionContext
- Implement Default trait for ActionContext
- Add local() and remote() constructor methods
- Make instance field optional for better flexibility
| -rw-r--r-- | crates/system_action/src/action.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/crates/system_action/src/action.rs b/crates/system_action/src/action.rs index 14f1148..562a142 100644 --- a/crates/system_action/src/action.rs +++ b/crates/system_action/src/action.rs @@ -11,13 +11,30 @@ pub trait Action<Args, Return> { ) -> impl std::future::Future<Output = Result<Return, TcpTargetError>> + Send; } +#[derive(Default)] 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, + instance: Option<ConnectionInstance>, +} + +impl ActionContext { + /// Generate local context + pub fn local() -> Self { + let mut ctx = ActionContext::default(); + ctx.local = true; + ctx + } + + /// Generate remote context + pub fn remote() -> Self { + let mut ctx = ActionContext::default(); + ctx.local = false; + ctx + } } impl ActionContext { @@ -32,7 +49,7 @@ impl ActionContext { } /// Get the connection instance in the current context - pub fn instance(&self) -> &ConnectionInstance { + pub fn instance(&self) -> &Option<ConnectionInstance> { &self.instance } } |
