pub struct ExecutionContext<T, E>where
E: Display,{ /* private fields */ }Expand description
Execution context (state after task execution)
This type provides result retrieval functionality after task execution.
Prepare lifecycle callbacks are configured on
super::DoubleCheckedLockExecutor and are already applied before an
ExecutionContext is returned. Task closures are responsible for their own
rollback, cleanup, and commit logic.
§Type Parameters
T- The type of the task return valueE- The type of the task error
Implementations§
Source§impl<T, E> ExecutionContext<T, E>where
E: Display,
impl<T, E> ExecutionContext<T, E>where
E: Display,
Sourcepub fn get_result(self) -> ExecutionResult<T, E>
pub fn get_result(self) -> ExecutionResult<T, E>
Gets the execution result (consumes the context)
Prepare commit or rollback callbacks have already been executed by the builder before this context was created. This method does not trigger additional side effects.
§Returns
The owned ExecutionResult stored in this context.
Examples found in repository?
29fn main() -> Result<(), Box<dyn std::error::Error>> {
30 // Create shared state
31 let running = Arc::new(AtomicBool::new(false));
32 let data = ArcMutex::new(42);
33
34 println!("Initial state: running = {}", running.load(Ordering::Acquire));
35 println!("Initial data: {}", data.read(|d| *d));
36
37 let executor = DoubleCheckedLockExecutor::builder()
38 .on(data.clone())
39 .when({
40 let running = running.clone();
41 move || running.load(Ordering::Acquire)
42 })
43 .build();
44
45 // Try to execute when service is not running (should fail)
46 let result = executor
47 .call_with(|value: &mut i32| {
48 *value += 1;
49 Ok::<_, std::io::Error>(*value)
50 })
51 .get_result();
52
53 if result.is_success() {
54 println!("Unexpected success: {}", result.unwrap());
55 } else {
56 println!("Expected failure: Condition not met.");
57 }
58
59 // Start the service
60 running.store(true, Ordering::Release);
61 println!("Service started: running = {}", running.load(Ordering::Acquire));
62
63 // Now execute should succeed
64 let result = executor
65 .call_with(|value: &mut i32| {
66 *value += 1;
67 Ok::<_, std::io::Error>(*value)
68 })
69 .get_result();
70
71 if result.is_success() {
72 println!("Success: new value = {}", result.unwrap());
73 } else {
74 println!("Unexpected failure: {:?}", result);
75 }
76
77 // Verify the data was updated
78 println!("Final data: {}", data.read(|d| *d));
79
80 // Stop the service
81 running.store(false, Ordering::Release);
82 println!("Service stopped: running = {}", running.load(Ordering::Acquire));
83
84 // Try to execute when service is stopped (should fail)
85 let result = executor
86 .call_with(|value: &mut i32| {
87 *value += 1;
88 Ok::<_, std::io::Error>(*value)
89 })
90 .get_result();
91
92 if result.is_success() {
93 println!("Unexpected success: {}", result.unwrap());
94 } else {
95 println!("Expected failure: Condition not met.");
96 }
97
98 Ok(())
99}Sourcepub fn peek_result(&self) -> &ExecutionResult<T, E>
pub fn peek_result(&self) -> &ExecutionResult<T, E>
Checks the execution result (does not consume the context)
§Returns
A shared reference to the stored ExecutionResult.
Sourcepub fn is_success(&self) -> bool
pub fn is_success(&self) -> bool
Source§impl<E> ExecutionContext<(), E>where
E: Display,
impl<E> ExecutionContext<(), E>where
E: Display,
Sourcepub fn finish(self) -> bool
pub fn finish(self) -> bool
Completes execution (for operations without return values)
Returns whether the execution was successful. This convenience method
intentionally collapses both unmet conditions and execution failures to
false; use Self::try_finish when the failure details must be
preserved.
§Returns
true if the stored result is ExecutionResult::Success containing
().
Sourcepub fn try_finish(self) -> Result<bool, ExecutorError<E>>
pub fn try_finish(self) -> Result<bool, ExecutorError<E>>
Completes execution while preserving failure details.
§Returns
Ok(true)- Execution succeeded with().Ok(false)- The double-checked condition was not met.Err(ExecutorError<E>)- Execution failed, preserving the original executor error.
§Errors
Returns the stored ExecutorError when the underlying result is
ExecutionResult::Failed.