@@ -2,6 +2,8 @@ use anyhow::Context;
22use base64:: { engine:: general_purpose, Engine as _} ;
33use clap:: Subcommand ;
44use jsonrpsee:: core:: params:: ObjectParams ;
5+ use prettytable:: { cell, Row , Table } ;
6+ use serde_json:: Value ;
57use std:: path:: PathBuf ;
68
79use 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+
53114pub 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