From 4752f261e347ad16378fad3047eb1bd2bea02604 Mon Sep 17 00:00:00 2001 From: Piotr Wilkin Date: Wed, 21 Jan 2026 14:34:38 +0100 Subject: [PATCH 1/4] jinja: support none|string --- common/jinja/value.cpp | 1 + tests/test-jinja.cpp | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/common/jinja/value.cpp b/common/jinja/value.cpp index e414aad444c..5ef21b5fc2b 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(""); }} }; return builtins; } diff --git a/tests/test-jinja.cpp b/tests/test-jinja.cpp index 99630ecb3b8..ab04cd00438 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}}, + "" + ); } static void test_literals(testing & t) { From b42c36e9532dde3e77a65049ea09e4db08fd788f Mon Sep 17 00:00:00 2001 From: "Piotr Wilkin (ilintar)" Date: Wed, 21 Jan 2026 15:11:50 +0100 Subject: [PATCH 2/4] Update common/jinja/value.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sigbjørn Skjæret --- common/jinja/value.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/jinja/value.cpp b/common/jinja/value.cpp index 5ef21b5fc2b..d2ed8242699 100644 --- a/common/jinja/value.cpp +++ b/common/jinja/value.cpp @@ -1005,7 +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(""); }} + {"string", [](const func_args &) -> value { return mk_val("None"); }} }; return builtins; } From 38138d20afd5d5c721ae495f946fcff34c1edf2f Mon Sep 17 00:00:00 2001 From: "Piotr Wilkin (ilintar)" Date: Wed, 21 Jan 2026 15:12:02 +0100 Subject: [PATCH 3/4] Update tests/test-jinja.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sigbjørn Skjæret --- tests/test-jinja.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test-jinja.cpp b/tests/test-jinja.cpp index ab04cd00438..54d3a0923bd 100644 --- a/tests/test-jinja.cpp +++ b/tests/test-jinja.cpp @@ -613,7 +613,7 @@ static void test_filters(testing & t) { test_template(t, "none to string", "{{ x|string }}", {{"x", nullptr}}, - "" + "None" ); } From 0be21c4986518194c2e2cc583a921075ca808017 Mon Sep 17 00:00:00 2001 From: Piotr Wilkin Date: Wed, 21 Jan 2026 15:14:59 +0100 Subject: [PATCH 4/4] Add as_string() --- common/jinja/value.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/jinja/value.h b/common/jinja/value.h index 7bd0202cea8..ccb05c6fd41 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) {}