all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH proxmox master 1/2] notify: migrate to handlebars 5
@ 2025-05-23 13:31 Lukas Wagner
  2025-05-23 13:31 ` [pve-devel] [PATCH proxmox master 2/2] notify: stop using deprecated functions from handlebars Lukas Wagner
  2025-05-26 14:01 ` [pve-devel] applied: [PATCH proxmox master 1/2] notify: migrate to handlebars 5 Thomas Lamprecht
  0 siblings, 2 replies; 3+ messages in thread
From: Lukas Wagner @ 2025-05-23 13:31 UTC (permalink / raw)
  To: pve-devel

No major changes were needed, just some minor changes on how we have to
handle errors in helpers.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 proxmox-notify/src/endpoints/webhook.rs  |  8 +++++---
 proxmox-notify/src/renderer/html.rs      | 10 +++++++---
 proxmox-notify/src/renderer/plaintext.rs | 10 +++++++---
 3 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/proxmox-notify/src/endpoints/webhook.rs b/proxmox-notify/src/endpoints/webhook.rs
index eada590e..e6947730 100644
--- a/proxmox-notify/src/endpoints/webhook.rs
+++ b/proxmox-notify/src/endpoints/webhook.rs
@@ -11,7 +11,7 @@ use std::time::Duration;
 
 use handlebars::{
     Context as HandlebarsContext, Handlebars, Helper, HelperResult, Output, RenderContext,
-    RenderError as HandlebarsRenderError,
+    RenderError as HandlebarsRenderError, RenderErrorReason,
 };
 use http::Request;
 use percent_encoding::AsciiSet;
@@ -473,7 +473,8 @@ fn handlebars_json(
         .map(|v| v.value())
         .ok_or_else(|| HandlebarsRenderError::new("json: missing parameter"))?;
 
-    let json = serde_json::to_string(param0)?;
+    let json =
+        serde_json::to_string(param0).map_err(|err| RenderErrorReason::NestedError(err.into()))?;
     out.write(&json)?;
 
     Ok(())
@@ -492,7 +493,8 @@ fn handlebars_escape(
         .ok_or_else(|| HandlebarsRenderError::new("escape: missing text parameter"))?;
 
     let val = Value::String(text.to_string());
-    let json = serde_json::to_string(&val)?;
+    let json =
+        serde_json::to_string(&val).map_err(|err| RenderErrorReason::NestedError(err.into()))?;
     out.write(&json[1..json.len() - 1])?;
 
     Ok(())
diff --git a/proxmox-notify/src/renderer/html.rs b/proxmox-notify/src/renderer/html.rs
index 77545f77..e84fd73a 100644
--- a/proxmox-notify/src/renderer/html.rs
+++ b/proxmox-notify/src/renderer/html.rs
@@ -1,6 +1,6 @@
 use handlebars::{
     Context, Handlebars, Helper, HelperResult, Output, RenderContext,
-    RenderError as HandlebarsRenderError,
+    RenderError as HandlebarsRenderError, RenderErrorReason,
 };
 use serde_json::Value;
 
@@ -20,7 +20,8 @@ fn render_html_table(
 
     let value = param.value();
 
-    let table: Table = serde_json::from_value(value.clone())?;
+    let table: Table = serde_json::from_value(value.clone())
+        .map_err(|err| RenderErrorReason::NestedError(err.into()))?;
 
     out.write("<table style=\"border: 1px solid\";border-style=\"collapse\">\n")?;
 
@@ -72,7 +73,10 @@ fn render_object(
     let value = param.value();
 
     out.write("\n<pre>")?;
-    out.write(&serde_json::to_string_pretty(&value)?)?;
+    out.write(
+        &serde_json::to_string_pretty(&value)
+            .map_err(|err| RenderErrorReason::NestedError(err.into()))?,
+    )?;
     out.write("\n</pre>\n")?;
 
     Ok(())
diff --git a/proxmox-notify/src/renderer/plaintext.rs b/proxmox-notify/src/renderer/plaintext.rs
index 59e917a3..104f12d9 100644
--- a/proxmox-notify/src/renderer/plaintext.rs
+++ b/proxmox-notify/src/renderer/plaintext.rs
@@ -2,7 +2,7 @@ use std::collections::HashMap;
 
 use handlebars::{
     Context, Handlebars, Helper, HelperResult, Output, RenderContext,
-    RenderError as HandlebarsRenderError,
+    RenderError as HandlebarsRenderError, RenderErrorReason,
 };
 use serde_json::Value;
 
@@ -44,7 +44,8 @@ fn render_plaintext_table(
         .param(0)
         .ok_or_else(|| HandlebarsRenderError::new("parameter not found"))?;
     let value = param.value();
-    let table: Table = serde_json::from_value(value.clone())?;
+    let table: Table = serde_json::from_value(value.clone())
+        .map_err(|err| RenderErrorReason::NestedError(err.into()))?;
     let widths = optimal_column_widths(&table);
 
     // Write header
@@ -89,7 +90,10 @@ fn render_object(
     let value = param.value();
 
     out.write("\n")?;
-    out.write(&serde_json::to_string_pretty(&value)?)?;
+    out.write(
+        &serde_json::to_string_pretty(&value)
+            .map_err(|err| RenderErrorReason::NestedError(err.into()))?,
+    )?;
     out.write("\n")?;
 
     Ok(())
-- 
2.39.5



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [pve-devel] [PATCH proxmox master 2/2] notify: stop using deprecated functions from handlebars
  2025-05-23 13:31 [pve-devel] [PATCH proxmox master 1/2] notify: migrate to handlebars 5 Lukas Wagner
@ 2025-05-23 13:31 ` Lukas Wagner
  2025-05-26 14:01 ` [pve-devel] applied: [PATCH proxmox master 1/2] notify: migrate to handlebars 5 Thomas Lamprecht
  1 sibling, 0 replies; 3+ messages in thread
From: Lukas Wagner @ 2025-05-23 13:31 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 proxmox-notify/src/endpoints/webhook.rs  |  8 ++---
 proxmox-notify/src/renderer/html.rs      |  7 ++--
 proxmox-notify/src/renderer/mod.rs       | 43 +++++++++---------------
 proxmox-notify/src/renderer/plaintext.rs |  7 ++--
 4 files changed, 25 insertions(+), 40 deletions(-)

diff --git a/proxmox-notify/src/endpoints/webhook.rs b/proxmox-notify/src/endpoints/webhook.rs
index e6947730..a210b94c 100644
--- a/proxmox-notify/src/endpoints/webhook.rs
+++ b/proxmox-notify/src/endpoints/webhook.rs
@@ -11,7 +11,7 @@ use std::time::Duration;
 
 use handlebars::{
     Context as HandlebarsContext, Handlebars, Helper, HelperResult, Output, RenderContext,
-    RenderError as HandlebarsRenderError, RenderErrorReason,
+    RenderErrorReason,
 };
 use http::Request;
 use percent_encoding::AsciiSet;
@@ -430,7 +430,7 @@ fn handlebars_percent_encode(
     let param0 = h
         .param(0)
         .and_then(|v| v.value().as_str())
-        .ok_or_else(|| HandlebarsRenderError::new("url-encode: missing parameter"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("url-encode", 0))?;
 
     // See https://developer.mozilla.org/en-US/docs/Glossary/Percent-encoding
     const FRAGMENT: &AsciiSet = &percent_encoding::CONTROLS
@@ -471,7 +471,7 @@ fn handlebars_json(
     let param0 = h
         .param(0)
         .map(|v| v.value())
-        .ok_or_else(|| HandlebarsRenderError::new("json: missing parameter"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("json", 0))?;
 
     let json =
         serde_json::to_string(param0).map_err(|err| RenderErrorReason::NestedError(err.into()))?;
@@ -490,7 +490,7 @@ fn handlebars_escape(
     let text = h
         .param(0)
         .and_then(|v| v.value().as_str())
-        .ok_or_else(|| HandlebarsRenderError::new("escape: missing text parameter"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("escape", 0))?;
 
     let val = Value::String(text.to_string());
     let json =
diff --git a/proxmox-notify/src/renderer/html.rs b/proxmox-notify/src/renderer/html.rs
index e84fd73a..16394531 100644
--- a/proxmox-notify/src/renderer/html.rs
+++ b/proxmox-notify/src/renderer/html.rs
@@ -1,6 +1,5 @@
 use handlebars::{
-    Context, Handlebars, Helper, HelperResult, Output, RenderContext,
-    RenderError as HandlebarsRenderError, RenderErrorReason,
+    Context, Handlebars, Helper, HelperResult, Output, RenderContext, RenderErrorReason,
 };
 use serde_json::Value;
 
@@ -16,7 +15,7 @@ fn render_html_table(
 ) -> HelperResult {
     let param = h
         .param(0)
-        .ok_or_else(|| HandlebarsRenderError::new("parameter not found"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("table", 0))?;
 
     let value = param.value();
 
@@ -68,7 +67,7 @@ fn render_object(
 ) -> HelperResult {
     let param = h
         .param(0)
-        .ok_or_else(|| HandlebarsRenderError::new("parameter not found"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("object", 0))?;
 
     let value = param.value();
 
diff --git a/proxmox-notify/src/renderer/mod.rs b/proxmox-notify/src/renderer/mod.rs
index bff76ed1..17c56bc8 100644
--- a/proxmox-notify/src/renderer/mod.rs
+++ b/proxmox-notify/src/renderer/mod.rs
@@ -3,8 +3,7 @@
 use std::{fmt::Display, time::Duration};
 
 use handlebars::{
-    Context, Handlebars, Helper, HelperDef, HelperResult, Output, RenderContext,
-    RenderError as HandlebarsRenderError,
+    Context, Handlebars, Helper, HelperDef, HelperResult, Output, RenderContext, RenderErrorReason,
 };
 use serde::{Deserialize, Serialize};
 use serde_json::Value;
@@ -84,11 +83,11 @@ fn handlebars_relative_percentage_helper(
     let param0 = h
         .param(0)
         .and_then(|v| v.value().as_f64())
-        .ok_or_else(|| HandlebarsRenderError::new("relative-percentage: param0 not found"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("relative-percentage", 0))?;
     let param1 = h
         .param(1)
         .and_then(|v| v.value().as_f64())
-        .ok_or_else(|| HandlebarsRenderError::new("relative-percentage: param1 not found"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("relative-percentage", 1))?;
 
     if param1 == 0.0 {
         out.write("-")?;
@@ -149,36 +148,24 @@ impl ValueRenderFunction {
     }
 
     fn register_helpers(handlebars: &mut Handlebars) {
-        ValueRenderFunction::HumanBytes.register_handlebars_helper(handlebars);
-        ValueRenderFunction::Duration.register_handlebars_helper(handlebars);
-        ValueRenderFunction::Timestamp.register_handlebars_helper(handlebars);
+        ValueRenderFunction::HumanBytes.register_handlebars_helper("human-bytes", handlebars);
+        ValueRenderFunction::Duration.register_handlebars_helper("duration", handlebars);
+        ValueRenderFunction::Timestamp.register_handlebars_helper("timestamp", handlebars);
     }
 
-    fn register_handlebars_helper(&'static self, handlebars: &mut Handlebars) {
-        // Use serde to get own kebab-case representation that is later used
-        // to register the helper, e.g. HumanBytes -> human-bytes
-        let tag = serde_json::to_string(self)
-            .expect("serde failed to serialize ValueRenderFunction enum");
-
-        // But as it's a string value, the generated string is quoted,
-        // so remove leading/trailing double quotes
-        let tag = tag
-            .strip_prefix('\"')
-            .and_then(|t| t.strip_suffix('\"'))
-            .expect("serde serialized string representation was not contained in double quotes");
-
+    fn register_handlebars_helper(&'static self, name: &'static str, handlebars: &mut Handlebars) {
         handlebars.register_helper(
-            tag,
+            name,
             Box::new(
-                |h: &Helper,
-                 _r: &Handlebars,
-                 _: &Context,
-                 _rc: &mut RenderContext,
-                 out: &mut dyn Output|
-                 -> HelperResult {
+                move |h: &Helper,
+                      _r: &Handlebars,
+                      _: &Context,
+                      _rc: &mut RenderContext,
+                      out: &mut dyn Output|
+                      -> HelperResult {
                     let param = h
                         .param(0)
-                        .ok_or(HandlebarsRenderError::new("parameter not found"))?;
+                        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex(name, 0))?;
 
                     let value = param.value();
                     out.write(&self.render(value))?;
diff --git a/proxmox-notify/src/renderer/plaintext.rs b/proxmox-notify/src/renderer/plaintext.rs
index 104f12d9..3433b99f 100644
--- a/proxmox-notify/src/renderer/plaintext.rs
+++ b/proxmox-notify/src/renderer/plaintext.rs
@@ -1,8 +1,7 @@
 use std::collections::HashMap;
 
 use handlebars::{
-    Context, Handlebars, Helper, HelperResult, Output, RenderContext,
-    RenderError as HandlebarsRenderError, RenderErrorReason,
+    Context, Handlebars, Helper, HelperResult, Output, RenderContext, RenderErrorReason,
 };
 use serde_json::Value;
 
@@ -42,7 +41,7 @@ fn render_plaintext_table(
 ) -> HelperResult {
     let param = h
         .param(0)
-        .ok_or_else(|| HandlebarsRenderError::new("parameter not found"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("table", 0))?;
     let value = param.value();
     let table: Table = serde_json::from_value(value.clone())
         .map_err(|err| RenderErrorReason::NestedError(err.into()))?;
@@ -85,7 +84,7 @@ fn render_object(
 ) -> HelperResult {
     let param = h
         .param(0)
-        .ok_or_else(|| HandlebarsRenderError::new("parameter not found"))?;
+        .ok_or_else(|| RenderErrorReason::ParamNotFoundForIndex("object", 0))?;
 
     let value = param.value();
 
-- 
2.39.5



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [pve-devel] applied: [PATCH proxmox master 1/2] notify: migrate to handlebars 5
  2025-05-23 13:31 [pve-devel] [PATCH proxmox master 1/2] notify: migrate to handlebars 5 Lukas Wagner
  2025-05-23 13:31 ` [pve-devel] [PATCH proxmox master 2/2] notify: stop using deprecated functions from handlebars Lukas Wagner
@ 2025-05-26 14:01 ` Thomas Lamprecht
  1 sibling, 0 replies; 3+ messages in thread
From: Thomas Lamprecht @ 2025-05-26 14:01 UTC (permalink / raw)
  To: pve-devel, Lukas Wagner

On Fri, 23 May 2025 15:31:57 +0200, Lukas Wagner wrote:
> No major changes were needed, just some minor changes on how we have to
> handle errors in helpers.
> 
> 

Applied, thanks!

[1/2] notify: migrate to handlebars 5
      commit: 8c5d7d0c85af05b8707c521ca172fcdb01b03a90
[2/2] notify: stop using deprecated functions from handlebars
      commit: b7209ed23b4772b68a8e3aee9bd23ca0827f3d3a


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-05-26 14:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-23 13:31 [pve-devel] [PATCH proxmox master 1/2] notify: migrate to handlebars 5 Lukas Wagner
2025-05-23 13:31 ` [pve-devel] [PATCH proxmox master 2/2] notify: stop using deprecated functions from handlebars Lukas Wagner
2025-05-26 14:01 ` [pve-devel] applied: [PATCH proxmox master 1/2] notify: migrate to handlebars 5 Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal