use std::fmt;
#[derive(Debug, Clone)]
pub struct ExecutionLogger {
unmet_condition_level: Option<log::Level>,
unmet_condition_message: String,
prepare_failed_level: Option<log::Level>,
prepare_failed_message: String,
prepare_commit_failed_level: Option<log::Level>,
prepare_commit_failed_message: String,
prepare_rollback_failed_level: Option<log::Level>,
prepare_rollback_failed_message: String,
}
impl Default for ExecutionLogger {
#[inline]
fn default() -> Self {
Self {
unmet_condition_level: None,
unmet_condition_message: String::new(),
prepare_failed_level: Some(log::Level::Error),
prepare_failed_message: "Prepare action failed".to_string(),
prepare_commit_failed_level: Some(log::Level::Error),
prepare_commit_failed_message: "Prepare commit action failed".to_string(),
prepare_rollback_failed_level: Some(log::Level::Error),
prepare_rollback_failed_message: "Prepare rollback action failed".to_string(),
}
}
}
impl ExecutionLogger {
#[inline]
pub fn unmet_condition_level(&self) -> Option<log::Level> {
self.unmet_condition_level
}
#[inline]
pub fn unmet_condition_message(&self) -> &str {
&self.unmet_condition_message
}
#[inline]
pub fn prepare_failed_level(&self) -> Option<log::Level> {
self.prepare_failed_level
}
#[inline]
pub fn prepare_failed_message(&self) -> &str {
&self.prepare_failed_message
}
#[inline]
pub fn prepare_commit_failed_level(&self) -> Option<log::Level> {
self.prepare_commit_failed_level
}
#[inline]
pub fn prepare_commit_failed_message(&self) -> &str {
&self.prepare_commit_failed_message
}
#[inline]
pub fn prepare_rollback_failed_level(&self) -> Option<log::Level> {
self.prepare_rollback_failed_level
}
#[inline]
pub fn prepare_rollback_failed_message(&self) -> &str {
&self.prepare_rollback_failed_message
}
#[inline]
pub fn set_unmet_condition(&mut self, level: Option<log::Level>, message: impl Into<String>) {
self.unmet_condition_level = level;
self.unmet_condition_message = message.into();
}
#[inline]
pub fn disable_unmet_condition(&mut self) {
self.unmet_condition_level = None;
}
#[inline]
pub fn set_prepare_failure(
&mut self,
level: Option<log::Level>,
message_prefix: impl Into<String>,
) {
self.prepare_failed_level = level;
self.prepare_failed_message = message_prefix.into();
}
#[inline]
pub fn disable_prepare_failure(&mut self) {
self.prepare_failed_level = None;
}
#[inline]
pub fn set_prepare_commit_failure(
&mut self,
level: Option<log::Level>,
message_prefix: impl Into<String>,
) {
self.prepare_commit_failed_level = level;
self.prepare_commit_failed_message = message_prefix.into();
}
#[inline]
pub fn disable_prepare_commit_failure(&mut self) {
self.prepare_commit_failed_level = None;
}
#[inline]
pub fn set_prepare_rollback_failure(
&mut self,
level: Option<log::Level>,
message_prefix: impl Into<String>,
) {
self.prepare_rollback_failed_level = level;
self.prepare_rollback_failed_message = message_prefix.into();
}
#[inline]
pub fn disable_prepare_rollback_failure(&mut self) {
self.prepare_rollback_failed_level = None;
}
#[inline]
pub fn log_unmet_condition(&self) {
let Some(level) = self.unmet_condition_level else {
return;
};
log::log!(level, "{}", self.unmet_condition_message);
}
#[inline]
pub fn log_prepare_failed<E: fmt::Display>(&self, err: E) {
let Some(level) = self.prepare_failed_level else {
return;
};
log::log!(level, "{}: {}", self.prepare_failed_message, err);
}
#[inline]
pub fn log_prepare_commit_failed<E: fmt::Display>(&self, err: E) {
let Some(level) = self.prepare_commit_failed_level else {
return;
};
log::log!(level, "{}: {}", self.prepare_commit_failed_message, err);
}
#[inline]
pub fn log_prepare_rollback_failed<E: fmt::Display>(&self, err: E) {
let Some(level) = self.prepare_rollback_failed_level else {
return;
};
log::log!(level, "{}: {}", self.prepare_rollback_failed_message, err);
}
}