pub struct ExecutorBuilder { /* private fields */ }Expand description
Initial builder for super::DoubleCheckedLockExecutor.
This state has no lock yet. Call Self::on to attach the lock.
Implementations§
Source§impl ExecutorBuilder
impl ExecutorBuilder
Sourcepub fn log_unmet_condition(
self,
level: Level,
message: impl Into<String>,
) -> Self
pub fn log_unmet_condition( self, level: Level, message: impl Into<String>, ) -> Self
Sourcepub fn disable_unmet_condition_logging(self) -> Self
pub fn disable_unmet_condition_logging(self) -> Self
Disables logging when the double-checked condition is not met.
§Returns
This builder with unmet-condition logging disabled.
Sourcepub fn log_prepare_failure(
self,
level: Level,
message_prefix: impl Into<String>,
) -> Self
pub fn log_prepare_failure( self, level: Level, message_prefix: impl Into<String>, ) -> Self
Sourcepub fn disable_prepare_failure_logging(self) -> Self
pub fn disable_prepare_failure_logging(self) -> Self
Disables logging when the prepare action fails.
§Returns
This builder with prepare failure logging disabled.
Sourcepub fn log_prepare_commit_failure(
self,
level: Level,
message_prefix: impl Into<String>,
) -> Self
pub fn log_prepare_commit_failure( self, level: Level, message_prefix: impl Into<String>, ) -> Self
Sourcepub fn disable_prepare_commit_failure_logging(self) -> Self
pub fn disable_prepare_commit_failure_logging(self) -> Self
Disables logging when the prepare commit action fails.
§Returns
This builder with prepare-commit failure logging disabled.
Sourcepub fn log_prepare_rollback_failure(
self,
level: Level,
message_prefix: impl Into<String>,
) -> Self
pub fn log_prepare_rollback_failure( self, level: Level, message_prefix: impl Into<String>, ) -> Self
Sourcepub fn disable_prepare_rollback_failure_logging(self) -> Self
pub fn disable_prepare_rollback_failure_logging(self) -> Self
Disables logging when the prepare rollback action fails.
§Returns
This builder with prepare-rollback failure logging disabled.
Sourcepub fn on<L, T>(self, lock: L) -> ExecutorLockBuilder<L, T>where
L: Lock<T>,
pub fn on<L, T>(self, lock: L) -> ExecutorLockBuilder<L, T>where
L: Lock<T>,
Attaches the lock protected by this executor.
§Parameters
lock- The lock handle. Arc-based lock wrappers can be cloned and stored here for reusable execution.
§Returns
The builder state that can configure the required tester.
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 catch_panics(self) -> Self
pub fn catch_panics(self) -> Self
Enables panic capture for tester, prepare callbacks, and task execution.
§Returns
This builder with panic capture enabled.
Sourcepub fn with_panic_capture(self, catch_panics: bool) -> Self
pub fn with_panic_capture(self, catch_panics: bool) -> Self
Sourcepub fn disable_catch_panics(self) -> Self
pub fn disable_catch_panics(self) -> Self
Disables panic capture for tester, prepare callbacks, and task execution.
§Returns
This builder with panic capture disabled.
Trait Implementations§
Source§impl Clone for ExecutorBuilder
impl Clone for ExecutorBuilder
Source§fn clone(&self) -> ExecutorBuilder
fn clone(&self) -> ExecutorBuilder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more