From c301172f660a1fe0b42023da990bf7385d69adb4 Mon Sep 17 00:00:00 2001 From: "Piotr Wilkin (ilintar)" Date: Wed, 21 Jan 2026 19:24:37 +0100 Subject: [PATCH] jinja: support none|string (#18995) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * jinja: support none|string * Update common/jinja/value.cpp Co-authored-by: Sigbjørn Skjæret * Update tests/test-jinja.cpp Co-authored-by: Sigbjørn Skjæret * Add as_string() --------- Co-authored-by: Sigbjørn Skjæret --- common/jinja/value.cpp | 1 + common/jinja/value.h | 2 +- tests/test-jinja.cpp | 6 ++++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/common/jinja/value.cpp b/common/jinja/value.cpp index e414aad444..d2ed824269 100644 --- a/common/jinja/value.cpp +++ b/common/jinja/value.cpp @@ -1005,6 +1005,7 @@ const func_builtins & value_none_t::get_builtins() const { static const func_builtins builtins = { {"default", default_value}, {"tojson", tojson}, + {"string", [](const func_args &) -> value { return mk_val("None"); }} }; return builtins; } diff --git a/common/jinja/value.h b/common/jinja/value.h index 7bd0202cea..ccb05c6fd4 100644 --- a/common/jinja/value.h +++ b/common/jinja/value.h @@ -342,12 +342,12 @@ struct value_none_t : public value_t { virtual std::string type() const override { return "None"; } virtual bool is_none() const override { return true; } virtual bool as_bool() const override { return false; } + virtual string as_string() const override { return string("None"); } virtual std::string as_repr() const override { return type(); } virtual const func_builtins & get_builtins() const override; }; using value_none = std::shared_ptr; - struct value_undefined_t : public value_t { std::string hint; // for debugging, to indicate where undefined came from value_undefined_t(const std::string & h = "") : hint(h) {} diff --git a/tests/test-jinja.cpp b/tests/test-jinja.cpp index 99630ecb3b..54d3a0923b 100644 --- a/tests/test-jinja.cpp +++ b/tests/test-jinja.cpp @@ -609,6 +609,12 @@ static void test_filters(testing & t) { json::object(), "hello" ); + + test_template(t, "none to string", + "{{ x|string }}", + {{"x", nullptr}}, + "None" + ); } static void test_literals(testing & t) {