depend on proxmox 0.1.31 - use Value to store result metadata

This commit is contained in:
Dietmar Maurer 2020-05-18 09:57:35 +02:00
parent 813aacde7e
commit 3f633844fa
2 changed files with 13 additions and 17 deletions

View File

@ -1,19 +1,18 @@
use std::collections::HashMap;
use serde_json::Value;
use serde_json::{json, Value};
use proxmox::api::{RpcEnvironment, RpcEnvironmentType};
/// Encapsulates information about the runtime environment
pub struct RestEnvironment {
env_type: RpcEnvironmentType,
result_attributes: HashMap<String, Value>,
result_attributes: Value,
user: Option<String>,
}
impl RestEnvironment {
pub fn new(env_type: RpcEnvironmentType) -> Self {
Self {
result_attributes: HashMap::new(),
result_attributes: json!({}),
user: None,
env_type,
}
@ -22,12 +21,12 @@ impl RestEnvironment {
impl RpcEnvironment for RestEnvironment {
fn set_result_attrib(&mut self, name: &str, value: Value) {
self.result_attributes.insert(name.into(), value);
fn result_attrib_mut (&mut self) -> &mut Value {
&mut self.result_attributes
}
fn get_result_attrib(&self, name: &str) -> Option<&Value> {
self.result_attributes.get(name)
fn result_attrib(&self) -> &Value {
&self.result_attributes
}
fn env_type(&self) -> RpcEnvironmentType {

View File

@ -41,16 +41,13 @@ pub fn json_data_response(data: Value) -> Response<Body> {
fn add_result_attributes(result: &mut Value, rpcenv: &dyn RpcEnvironment)
{
if let Some(total) = rpcenv.get_result_attrib("total").and_then(|v| v.as_u64()) {
result["total"] = Value::from(total);
}
let attributes = match rpcenv.result_attrib().as_object() {
Some(attr) => attr,
None => return,
};
if let Some(active) = rpcenv.get_result_attrib("active").and_then(|v| v.as_bool()) {
result["active"] = Value::from(active);
}
if let Some(changes) = rpcenv.get_result_attrib("changes") {
result["changes"] = changes.clone();
for (key, value) in attributes {
result[key] = value.clone();
}
}