Rust: передача функций / фильтров в шаблон Tera
У меня есть шаблон Tera (похожий на Jinja2), для которого требуется импортировать 2 функции. Вызывает ожидаемую функцию, которая принимает 2 аргумента. Как мне подойти к этому?
Одна из функций:
#[derive(Serialize)]
#[derive(Debug)]
enum Color {
White,
Blue,
Green,
Yellow,
Red,
}
fn bootstrap_table_color (e: Color) -> String {
return match e {
White => "".to_string(),
Blue => "table-info".to_string(),
Green => "table-success".to_string(),
Yellow => "table-warning".to_string(),
Red => "table-danger".to_string(),
};
}
Шаблон:
let mut htmlbuilder = tera::Tera::new("src/*.html").unwrap();
let mut context = tera::Context::new();
htmlbuilder.register_filter("bootstrap_table_color", bootstrap_table_color);
context.insert("allentries", &allentries);
let htmldata = htmlbuilder.render_str("
{% for e in allentries[0] %}
<td class='{{ bootstrap_table_color(e=e.color) }}'>
<a class='{{ bootstrap_text_color(e=e.color) }}' href='{{ e.filename }}'>
{{ e.text }}
</a>
</td>
{% endfor %}
Ошибка при компиляции:
error[E0593]: function is expected to take 2 arguments, but it takes 1 argument
--> src/main.rs:151:55
|
26 | fn bootstrap_table_color (e: Color) -> String {
| --------------------------------------------- takes 1 argument
...
151 | htmlbuilder.register_filter("bootstrap_table_color", bootstrap_table_color);
| ^^^^^^^^^^^^^^^^^^^^^ expected function that takes 2 arguments
|
= note: required because of the requirements on the impl of `tera::Filter` for `fn(Color) -> std::string::String {bootstrap_table_color}`