src/tools.rs: new helper json_object_to_query
This commit is contained in:
parent
59b9c7ef5a
commit
f5f13ebc5a
@ -17,7 +17,7 @@ use proxmox_backup::backup::*;
|
|||||||
//use proxmox_backup::catar::encoder::*;
|
//use proxmox_backup::catar::encoder::*;
|
||||||
//use proxmox_backup::backup::datastore::*;
|
//use proxmox_backup::backup::datastore::*;
|
||||||
|
|
||||||
use serde_json::{Value};
|
use serde_json::{json, Value};
|
||||||
use hyper::Body;
|
use hyper::Body;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
@ -193,10 +193,10 @@ fn list_snapshots(
|
|||||||
let path = tools::required_string_param(¶m, "group")?;
|
let path = tools::required_string_param(¶m, "group")?;
|
||||||
let group = BackupGroup::parse(path)?;
|
let group = BackupGroup::parse(path)?;
|
||||||
|
|
||||||
let query = url::form_urlencoded::Serializer::new(String::new())
|
let query = tools::json_object_to_query(json!({
|
||||||
.append_pair("backup-type", &group.backup_type)
|
"backup-type": &group.backup_type,
|
||||||
.append_pair("backup-id", &group.backup_id)
|
"backup-id": &group.backup_id,
|
||||||
.finish();
|
}))?;
|
||||||
|
|
||||||
let mut client = HttpClient::new(&repo.host, &repo.user);
|
let mut client = HttpClient::new(&repo.host, &repo.user);
|
||||||
|
|
||||||
|
32
src/tools.rs
32
src/tools.rs
@ -17,7 +17,7 @@ use std::time::Duration;
|
|||||||
use std::os::unix::io::RawFd;
|
use std::os::unix::io::RawFd;
|
||||||
use std::os::unix::io::AsRawFd;
|
use std::os::unix::io::AsRawFd;
|
||||||
|
|
||||||
use serde_json::Value;
|
use serde_json::{json, Value};
|
||||||
|
|
||||||
pub mod timer;
|
pub mod timer;
|
||||||
pub mod wrapped_reader_stream;
|
pub mod wrapped_reader_stream;
|
||||||
@ -320,6 +320,36 @@ pub fn nodename() -> &'static str {
|
|||||||
&NODENAME
|
&NODENAME
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn json_object_to_query(data: Value) -> Result<String, Error> {
|
||||||
|
|
||||||
|
let mut query = url::form_urlencoded::Serializer::new(String::new());
|
||||||
|
|
||||||
|
let object = data.as_object().ok_or_else(|| {
|
||||||
|
format_err!("json_object_to_query: got wrong data type (expected object).")
|
||||||
|
})?;
|
||||||
|
|
||||||
|
for (key, value) in object {
|
||||||
|
match value {
|
||||||
|
Value::Bool(b) => { query.append_pair(key, &b.to_string()); }
|
||||||
|
Value::Number(n) => { query.append_pair(key, &n.to_string()); }
|
||||||
|
Value::String(s) => { query.append_pair(key, &s); }
|
||||||
|
Value::Array(arr) => {
|
||||||
|
for element in arr {
|
||||||
|
match element {
|
||||||
|
Value::Bool(b) => { query.append_pair(key, &b.to_string()); }
|
||||||
|
Value::Number(n) => { query.append_pair(key, &n.to_string()); }
|
||||||
|
Value::String(s) => { query.append_pair(key, &s); }
|
||||||
|
_ => bail!("json_object_to_query: unable to handle complex array data types."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => bail!("json_object_to_query: unable to handle complex data types."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(query.finish())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn required_string_param<'a>(param: &'a Value, name: &str) -> Result<&'a str, Error> {
|
pub fn required_string_param<'a>(param: &'a Value, name: &str) -> Result<&'a str, Error> {
|
||||||
match param[name].as_str() {
|
match param[name].as_str() {
|
||||||
Some(s) => Ok(s),
|
Some(s) => Ok(s),
|
||||||
|
Loading…
Reference in New Issue
Block a user