Skip to content

Commit

Permalink
test: add example for getting error generated from helper [#512]
Browse files Browse the repository at this point in the history
  • Loading branch information
sunng87 committed Jul 2, 2022
1 parent 87e9912 commit 40175f9
Showing 1 changed file with 48 additions and 3 deletions.
51 changes: 48 additions & 3 deletions examples/error.rs
Expand Up @@ -3,11 +3,44 @@ extern crate handlebars;
#[macro_use]
extern crate serde_json;

use std::error::Error;
use std::error::Error as StdError;

use handlebars::Handlebars;
use handlebars::{Context, Handlebars, Helper, Output, RenderContext, RenderError};
use thiserror::Error;

fn main() -> Result<(), Box<dyn Error>> {
#[derive(Debug, Error)]
pub enum HelperError {
#[error("db error")]
DbError,
#[error("api error")]
ApiError,
}

/// A helper that raise error according to parameters
pub fn error_helper(
h: &Helper,
_: &Handlebars,
_: &Context,
_: &mut RenderContext,
_: &mut dyn Output,
) -> Result<(), RenderError> {
let param = h
.param(0)
.ok_or(RenderError::new("Param 0 is required for error helper."))?;
match param.value().as_str() {
Some("db") => Err(RenderError::from_error(
"helper error",
HelperError::DbError,
)),
Some("api") => Err(RenderError::from_error(
"helper error",
HelperError::ApiError,
)),
_ => Ok(()),
}
}

fn main() -> Result<(), Box<dyn StdError>> {
env_logger::init();
let mut handlebars = Handlebars::new();

Expand Down Expand Up @@ -36,5 +69,17 @@ fn main() -> Result<(), Box<dyn Error>> {
println!("{}", be1.source().unwrap());
println!("{:?}", be1.source().unwrap().source());

// process helper error
handlebars.register_helper("err", Box::new(error_helper));
let e2 = handlebars
.render_template("{{err \"db\"}}", &json!({}))
.unwrap_err();
match e2.source().unwrap().downcast_ref::<HelperError>() {
Some(HelperError::DbError) => {
println!("Detected error from helper: db error",)
}
_ => {}
}

Ok(())
}

0 comments on commit 40175f9

Please sign in to comment.