use std::marker::PhantomData;
use super::{
ExecutionLogger,
executor_lock_builder::ExecutorLockBuilder,
};
use crate::lock::Lock;
#[derive(Debug, Default, Clone)]
pub struct ExecutorBuilder {
logger: ExecutionLogger,
}
impl ExecutorBuilder {
#[inline]
pub fn log_unmet_condition(mut self, level: log::Level, message: impl Into<String>) -> Self {
self.logger.set_unmet_condition(Some(level), message);
self
}
#[inline]
pub fn log_prepare_failure(
mut self,
level: log::Level,
message_prefix: impl Into<String>,
) -> Self {
self.logger.set_prepare_failure(Some(level), message_prefix);
self
}
#[inline]
pub fn log_prepare_commit_failure(
mut self,
level: log::Level,
message_prefix: impl Into<String>,
) -> Self {
self.logger
.set_prepare_commit_failure(Some(level), message_prefix);
self
}
#[inline]
pub fn log_prepare_rollback_failure(
mut self,
level: log::Level,
message_prefix: impl Into<String>,
) -> Self {
self.logger
.set_prepare_rollback_failure(Some(level), message_prefix);
self
}
#[inline]
pub fn on<L, T>(self, lock: L) -> ExecutorLockBuilder<L, T>
where
L: Lock<T>,
{
ExecutorLockBuilder {
lock,
logger: self.logger,
_phantom: PhantomData,
}
}
}