[pbs-devel] [PATCH proxmox 1/1] schema: add print_property_string function

Hannes Laimer h.laimer at proxmox.com
Tue Jul 5 15:08:08 CEST 2022


helpful when property string field are not updated through the API

Signed-off-by: Hannes Laimer <h.laimer at proxmox.com>
---
 proxmox-schema/src/schema.rs | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/proxmox-schema/src/schema.rs b/proxmox-schema/src/schema.rs
index a2b165c..8c93452 100644
--- a/proxmox-schema/src/schema.rs
+++ b/proxmox-schema/src/schema.rs
@@ -7,6 +7,7 @@
 use std::fmt;
 
 use anyhow::{bail, format_err, Error};
+use serde::Serialize;
 use serde_json::{json, Value};
 
 use crate::ConstRegexPattern;
@@ -932,6 +933,33 @@ impl Schema {
         Ok(value)
     }
 
+    /// Generate property string of structs with only simple fields
+    pub fn print_property_string<T: Serialize>(&'static self, data: &T) -> Result<String, Error> {
+        fn print_simple_value(value: Value) -> Result<String, Error> {
+            let string = match value {
+                Value::Bool(b) if b => "1".to_string(),
+                Value::Bool(_) => "0".to_string(),
+                Value::Number(n) => n.to_string(),
+                Value::String(s) => s,
+                _ => {
+                    bail!("Only structs with only simple fields can be formatted as a property string.")
+                }
+            };
+            Ok(string)
+        }
+
+        match serde_json::to_value(data)? {
+            Value::Object(obj) => {
+                let mut props: Vec<String> = Vec::new();
+                for (key, value) in obj.into_iter() {
+                    props.push(format!("{}=\"{}\"", key, print_simple_value(value)?));
+                }
+                Ok(props.join(","))
+            }
+            value => print_simple_value(value),
+        }
+    }
+
     /// Parse a complex property string (`ApiStringFormat::PropertyString`)
     pub fn parse_property_string(&'static self, value_str: &str) -> Result<Value, Error> {
         // helper for object/allof schemas:
-- 
2.30.2






More information about the pbs-devel mailing list