#![cfg(feature = "rhai-runtime")]
use uni_plugin::CapabilitySet;
use crate::loader::RhaiLoader;
pub mod fs;
pub mod kms;
pub mod net;
pub mod secret;
pub(crate) fn rt_err(msg: impl Into<String>) -> Box<rhai::EvalAltResult> {
let msg: String = msg.into();
Box::new(rhai::EvalAltResult::ErrorRuntime(
msg.into(),
rhai::Position::NONE,
))
}
pub(crate) fn require_allowed(
caps: &CapabilitySet,
allows: impl Fn(&uni_plugin::Capability) -> bool,
deny_msg: impl Into<String>,
) -> Result<(), Box<rhai::EvalAltResult>> {
if caps.iter().any(allows) {
Ok(())
} else {
Err(rt_err(deny_msg))
}
}
pub(crate) fn require_service<T: ?Sized>(
svc: &Option<std::sync::Arc<T>>,
absent_msg: impl Into<String>,
) -> Result<&std::sync::Arc<T>, Box<rhai::EvalAltResult>> {
svc.as_ref().ok_or_else(|| rt_err(absent_msg))
}
pub fn register_default_host_fns(loader: &mut RhaiLoader) {
fs::register(loader);
net::register(loader);
kms::register(loader);
secret::register(loader);
}