mirror of
https://github.com/askama-rs/askama.git
synced 2025-09-28 13:30:59 +00:00
102 lines
2.0 KiB
Rust
102 lines
2.0 KiB
Rust
use rinja::Template;
|
|
|
|
#[derive(Template)]
|
|
#[template(source = "{{ func(value) }}", ext = "txt")]
|
|
struct OneFunction {
|
|
func: fn(&i32) -> i32,
|
|
value: i32,
|
|
}
|
|
|
|
#[test]
|
|
fn test_one_func() {
|
|
let t = OneFunction {
|
|
func: |&i| 2 * i,
|
|
value: 123,
|
|
};
|
|
assert_eq!(t.render().unwrap(), "246");
|
|
}
|
|
|
|
#[derive(Template)]
|
|
#[template(source = "{{ self.func(value) }}", ext = "txt")]
|
|
struct OneFunctionSelf {
|
|
value: i32,
|
|
}
|
|
|
|
impl OneFunctionSelf {
|
|
fn func(&self, i: &i32) -> i32 {
|
|
2 * i
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_one_func_self() {
|
|
let t = OneFunctionSelf { value: 123 };
|
|
assert_eq!(t.render().unwrap(), "246");
|
|
}
|
|
|
|
#[derive(Template)]
|
|
#[template(source = "{{ func[index](value) }}", ext = "txt")]
|
|
struct OneFunctionIndex<'a> {
|
|
func: &'a [fn(&i32) -> i32],
|
|
value: i32,
|
|
index: usize,
|
|
}
|
|
|
|
#[test]
|
|
fn test_one_func_index() {
|
|
let t = OneFunctionIndex {
|
|
func: &[|_| panic!(), |&i| 2 * i, |_| panic!(), |_| panic!()],
|
|
value: 123,
|
|
index: 1,
|
|
};
|
|
assert_eq!(t.render().unwrap(), "246");
|
|
}
|
|
|
|
struct AddToGetAFunction;
|
|
|
|
impl std::ops::Add<usize> for &AddToGetAFunction {
|
|
type Output = fn(&i32) -> i32;
|
|
|
|
fn add(self, rhs: usize) -> Self::Output {
|
|
assert_eq!(rhs, 1);
|
|
|&i| 2 * i
|
|
}
|
|
}
|
|
|
|
#[derive(Template)]
|
|
#[template(source = "{{ (func + index)(value) }}", ext = "txt")]
|
|
struct OneFunctionBinop<'a> {
|
|
func: &'a AddToGetAFunction,
|
|
value: i32,
|
|
index: usize,
|
|
}
|
|
|
|
#[test]
|
|
fn test_one_func_binop() {
|
|
let t = OneFunctionBinop {
|
|
func: &AddToGetAFunction,
|
|
value: 123,
|
|
index: 1,
|
|
};
|
|
assert_eq!(t.render().unwrap(), "246");
|
|
}
|
|
|
|
fn double_attr_arg_helper(x: u32) -> u32 {
|
|
x * x + x
|
|
}
|
|
|
|
#[derive(rinja::Template)]
|
|
#[template(
|
|
source = "{{ self::double_attr_arg_helper(self.x.0 + 2) }}",
|
|
ext = "txt"
|
|
)]
|
|
struct DoubleAttrArg {
|
|
x: (u32,),
|
|
}
|
|
|
|
#[test]
|
|
fn test_double_attr_arg() {
|
|
let t = DoubleAttrArg { x: (10,) };
|
|
assert_eq!(t.render().unwrap(), "156");
|
|
}
|