[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