use crate::error::RenderError;
use crate::helpers::{Context, Helper, HelperDef, RenderContext, ScopedJson};
use crate::registry::Registry;
use crate::PathAndJson;
pub fn render_fmt_message<'rc>(mut mess: String, args: &[PathAndJson<'rc>]) -> String {
for arg in args {
mess = mess.replace("{}", &arg.value().clone().to_string());
}
mess
}
#[derive(Clone, Copy)]
pub struct ErrorHelper {
name: crate::HelperName,
}
impl HelperDef for ErrorHelper {
fn call_inner<'reg: 'rc, 'rc>(
&self,
h: &Helper<'rc>,
_: &'reg Registry<'reg>,
_: &'rc Context,
_: &mut RenderContext<'reg, 'rc>,
) -> Result<ScopedJson<'rc>, RenderError> {
let message = h
.param(0)
.ok_or_else(|| {
RenderError::new(format!(
"Param not found for helper \"{}\": message",
self.name
))
})?
.value()
.as_str()
.ok_or_else(|| {
RenderError::new(format!(
"Param invalid for helper \"{}\": message must be string",
self.name
))
})?
.to_string();
Err(RenderError::new(render_fmt_message(
message,
&h.params()[1..],
)))
}
}
pub static ERROR_HELPER: ErrorHelper = ErrorHelper {
name: crate::HelperName::Error,
};