Skip to content

Commit f2e1924

Browse files
committed
pretty print network start responses
1 parent e487063 commit f2e1924

File tree

1 file changed

+63
-2
lines changed

1 file changed

+63
-2
lines changed

src/rust-cli/network.rs

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ use anyhow::Context;
22
use base64::{engine::general_purpose, Engine as _};
33
use clap::Subcommand;
44
use jsonrpsee::core::params::ObjectParams;
5+
use prettytable::{cell, Row, Table};
6+
use serde_json::Value;
57
use std::path::PathBuf;
68

79
use crate::rpc_call::make_rpc_call;
@@ -50,6 +52,65 @@ fn handle_network_status_response(data: serde_json::Value) {
5052
}
5153
}
5254

55+
fn handle_network_start_response(data: serde_json::Value) -> anyhow::Result<()> {
56+
// warnet table
57+
if let Some(warnet_headers) = data["warnet_headers"].as_array() {
58+
let mut table = Table::new();
59+
let headers: Vec<_> = warnet_headers
60+
.iter()
61+
.map(|header| header.as_str().unwrap_or(""))
62+
.collect();
63+
table.add_row(Row::new(
64+
headers.into_iter().map(|header| cell!(header)).collect(),
65+
));
66+
// just used as fallback if warnet or its array content is missing
67+
let v: Vec<Value> = vec![Value::Null];
68+
69+
if let Some(warnet) = data["warnet"].as_array().and_then(|row| row.first()) {
70+
let row_data: Vec<_> = match warnet.as_array() {
71+
Some(array) => array,
72+
None => &v,
73+
}
74+
.iter()
75+
.map(|item| item.as_str().unwrap_or(""))
76+
.collect();
77+
table.add_row(Row::new(
78+
row_data.into_iter().map(|row| cell!(row)).collect(),
79+
));
80+
}
81+
table.printstd();
82+
}
83+
// tanks table
84+
if let Some(tank_headers) = data["tank_headers"].as_array() {
85+
let mut table = Table::new();
86+
let headers: Vec<_> = tank_headers
87+
.iter()
88+
.map(|header| header.as_str().unwrap_or(""))
89+
.collect();
90+
table.add_row(Row::new(
91+
headers.into_iter().map(|header| cell!(header)).collect(),
92+
));
93+
94+
let v: Vec<Value> = vec![Value::Null];
95+
if let Some(tanks) = data["tanks"].as_array() {
96+
for tank in tanks {
97+
let row_data: Vec<_> = match tank.as_array() {
98+
Some(array) => array,
99+
None => &v,
100+
}
101+
.iter()
102+
.map(|item| item.as_str().unwrap_or(""))
103+
.collect();
104+
table.add_row(Row::new(
105+
row_data.into_iter().map(|row| cell!(row)).collect(),
106+
));
107+
}
108+
}
109+
table.printstd();
110+
}
111+
Ok(())
112+
}
113+
53114
pub async fn handle_network_command(
54115
command: &NetworkCommand,
55116
mut params: ObjectParams,
@@ -76,8 +137,8 @@ pub async fn handle_network_command(
76137
let data = make_rpc_call(request, params).await?;
77138
match request {
78139
"network_status" => handle_network_status_response(data),
79-
"network_start" => {
80-
todo!("Format this {:?}", data);
140+
"network_from_file" => {
141+
handle_network_start_response(data.clone())?;
81142
}
82143
_ => {
83144
println!("{}", data)

0 commit comments

Comments
 (0)