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!(
35 "Initial state: running = {}",
36 running.load(Ordering::Acquire)
37 );
38 println!("Initial data: {}", data.read(|d| *d));
39
40 let executor = DoubleCheckedLockExecutor::builder()
41 .on(data.clone())
42 .when({
43 let running = running.clone();
44 move || running.load(Ordering::Acquire)
45 })
46 .build();
47
48 // Try to execute when service is not running (should fail)
49 let result = executor
50 .call_with(|value: &mut i32| {
51 *value += 1;
52 Ok::<_, std::io::Error>(*value)
53 })
54 .get_result();
55
56 if result.is_success() {
57 println!("Unexpected success: {}", result.unwrap());
58 } else {
59 println!("Expected failure: Condition not met.");
60 }
61
62 // Start the service
63 running.store(true, Ordering::Release);
64 println!(
65 "Service started: running = {}",
66 running.load(Ordering::Acquire)
67 );
68
69 // Now execute should succeed
70 let result = executor
71 .call_with(|value: &mut i32| {
72 *value += 1;
73 Ok::<_, std::io::Error>(*value)
74 })
75 .get_result();
76
77 if result.is_success() {
78 println!("Success: new value = {}", result.unwrap());
79 } else {
80 println!("Unexpected failure: {:?}", result);
81 }
82
83 // Verify the data was updated
84 println!("Final data: {}", data.read(|d| *d));
85
86 // Stop the service
87 running.store(false, Ordering::Release);
88 println!(
89 "Service stopped: running = {}",
90 running.load(Ordering::Acquire)
91 );
92
93 // Try to execute when service is stopped (should fail)
94 let result = executor
95 .call_with(|value: &mut i32| {
96 *value += 1;
97 Ok::<_, std::io::Error>(*value)
98 })
99 .get_result();
100
101 if result.is_success() {
102 println!("Unexpected success: {}", result.unwrap());
103 } else {
104 println!("Expected failure: Condition not met.");
105 }
106
107 Ok(())
108}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