use crate::api::{Context, Message, Server};
use vsmtp_mail_parser::MessageBody;
#[derive(Debug)]
pub struct RuleState {
pub(super) engine: rhai::Engine,
pub(super) server: Server,
pub(super) mail_context: Context,
pub(super) message: Message,
}
impl RuleState {
#[must_use]
pub fn context(&self) -> Context {
self.mail_context.clone()
}
#[must_use]
pub fn message(&self) -> Message {
self.message.clone()
}
#[must_use]
pub const fn engine(&self) -> &rhai::Engine {
&self.engine
}
#[must_use]
pub fn take(self: std::sync::Arc<Self>) -> (vsmtp_common::Context, MessageBody) {
let this = std::sync::Arc::try_unwrap(self).expect("Arc: strong reference alive");
drop(this.engine);
(
std::sync::Arc::try_unwrap(this.mail_context)
.expect("Arc: strong reference alive")
.into_inner()
.expect("RwLock: is poisoned"),
std::sync::Arc::try_unwrap(this.message)
.expect("Arc: strong reference alive")
.into_inner()
.expect("RwLock: is poisoned"),
)
}
}