src/tools/disks/zpool_status.rs: simplify code by using serde_json::to_value
This commit is contained in:
parent
f675c5e978
commit
07fb504943
|
@ -179,25 +179,9 @@ fn parse_zpool_status(input: &str) -> Result<Vec<(String, String)>, Error> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn vdev_list_to_tree(vdev_list: &[ZFSPoolVDevState]) -> Result<Value, Error> {
|
pub fn vdev_list_to_tree(vdev_list: &[ZFSPoolVDevState]) -> Result<Value, Error> {
|
||||||
indented_list_to_tree(vdev_list, |vdev, node| {
|
indented_list_to_tree(vdev_list, |vdev| {
|
||||||
node.insert("name".to_string(), Value::String(vdev.name.clone()));
|
let node = serde_json::to_value(vdev).unwrap();
|
||||||
node.insert("lvl".to_string(), Value::Number(vdev.lvl.into()));
|
(node, vdev.lvl)
|
||||||
if let Some(ref state) = vdev.state {
|
|
||||||
node.insert("state".to_string(), Value::String(state.clone()));
|
|
||||||
}
|
|
||||||
if let Some(ref msg) = vdev.msg {
|
|
||||||
node.insert("msg".to_string(), Value::String(msg.clone()));
|
|
||||||
}
|
|
||||||
if let Some(read) = vdev.read {
|
|
||||||
node.insert("read".to_string(), Value::Number(read.into()));
|
|
||||||
}
|
|
||||||
if let Some(write) = vdev.write {
|
|
||||||
node.insert("write".to_string(), Value::Number(write.into()));
|
|
||||||
}
|
|
||||||
if let Some(cksum) = vdev.cksum {
|
|
||||||
node.insert("cksum".to_string(), Value::Number(cksum.into()));
|
|
||||||
}
|
|
||||||
vdev.lvl
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +189,7 @@ fn indented_list_to_tree<'a, T, F, I>(items: I, to_node: F) -> Result<Value, Err
|
||||||
where
|
where
|
||||||
T: 'a,
|
T: 'a,
|
||||||
I: IntoIterator<Item = &'a T>,
|
I: IntoIterator<Item = &'a T>,
|
||||||
F: Fn(&T, &mut serde_json::Map<String, Value>) -> u64,
|
F: Fn(&T) -> (Value, u64),
|
||||||
{
|
{
|
||||||
use serde_json::Map;
|
use serde_json::Map;
|
||||||
use std::mem::replace;
|
use std::mem::replace;
|
||||||
|
@ -219,8 +203,13 @@ where
|
||||||
cur_node.insert("name".to_string(), Value::String("root".to_string()));
|
cur_node.insert("name".to_string(), Value::String("root".to_string()));
|
||||||
|
|
||||||
for item in items {
|
for item in items {
|
||||||
let mut node = Map::new();
|
let (node, node_level) = to_node(&item);
|
||||||
let vdev_level = 1 + to_node(&item, &mut node);
|
let vdev_level = 1 + node_level;
|
||||||
|
let mut node = match node {
|
||||||
|
Value::Object(map) => map,
|
||||||
|
_ => bail!("to_node returned wrong type"),
|
||||||
|
};
|
||||||
|
|
||||||
node.insert("leaf".to_string(), Value::Bool(true));
|
node.insert("leaf".to_string(), Value::Bool(true));
|
||||||
|
|
||||||
// if required, go back up (possibly multiple levels):
|
// if required, go back up (possibly multiple levels):
|
||||||
|
|
Loading…
Reference in New Issue