Встроенный тестер «определить» не работает, как я ожидал - PullRequest
0 голосов
/ 09 июля 2019

У меня есть шаблон с разделом, который должен отображаться, если определена переменная.Но я не могу заставить это работать.У меня есть что-то вроде этого в моем проекте:

use serde::Serialize;

#[derive(Default,Serialize)]
struct AStruct {
  parameter: Option<String>
}

// AStruct { parameter: None }
let a_struct_instance = AStruct {..Default::default()};
TEMPLATES.render("template.conf", &a_struct_instance) {...}
// template.conf example:
//
// {% if parameter is defined %}
//   SOMETHING TO SHOW
// {% endif %}

Шаблон отображается как если параметр определен, почему это так?

Поле параметра равно None, но во встроенной функции тестера значением 'value' является Some (Null), и is_some () возвращает true для этого.

https://github.com/Keats/tera/blob/master/src/builtins/testers.rs#L36

/// Returns true if `value` is defined. Otherwise, returns false.
pub fn defined(value: Option<Value>, params: Vec<Value>) -> Result<bool> {
    number_args_allowed("defined", 0, params.len())?;
    Ok(value.is_some())
}

Что я делаю не так?

1 Ответ

0 голосов
/ 09 июля 2019

Что ж, моя проблема заключалась в том, что тестеры «определен» или «не определен» проверяет, определена ли переменная / undef, а не ее значение.

...