use vsmtp_plugin_vsl::objects::Object;
use crate::api::{EngineResult, SharedObject};
use rhai::plugin::{
mem, Dynamic, FnAccess, FnNamespace, ImmutableString, Module, NativeCallContext,
PluginFunction, RhaiResult, TypeId,
};
pub use utils::*;
#[rhai::plugin::export_module]
mod utils {
#[rhai_fn()]
#[must_use]
pub fn get_root_domain(domain: &str) -> String {
vsmtp_auth::get_root_domain(domain).map_or_else(|_| domain.to_string(), |root| root)
}
#[doc(hidden)]
#[rhai_fn(name = "get_root_domain", pure, return_raw)]
pub fn get_root_domain_obj(domain: &mut SharedObject) -> EngineResult<String> {
match domain.as_ref() {
Object::Fqdn(domain) => Ok(get_root_domain(domain)),
_ => Err(format!("type `{}` is not a domain", domain.as_ref()).into()),
}
}
#[rhai_fn(global, name = "env")]
pub fn env_str(variable: &str) -> rhai::Dynamic {
std::env::var(variable).map_or(rhai::Dynamic::UNIT, std::convert::Into::into)
}
#[doc(hidden)]
#[rhai_fn(global, name = "env", pure)]
pub fn env_obj(variable: &mut SharedObject) -> rhai::Dynamic {
std::env::var(variable.to_string()).map_or(rhai::Dynamic::UNIT, std::convert::Into::into)
}
}