use serde_json::{from_slice, Value}; use shlex::split; use std::process::{Command, Output}; const PANEL_BINARY: &str = "/u_panel"; pub struct Panel; impl Panel { fn run(args: &[&str]) -> Output { Command::new(PANEL_BINARY) .arg("--json") .args(args) .output() .unwrap() } pub fn output_argv(args: &[&str]) -> Value { let result = Self::run(args); assert!(result.status.success()); from_slice(&result.stdout).unwrap() } pub fn output(args: &str) -> Value { let splitted = split(args).unwrap(); Self::output_argv( splitted .iter() .map(|s| s.as_ref()) .collect::>() .as_ref(), ) } pub fn check_output(args: &str) -> Vec { let result = Self::output(args); assert_eq!(result["status"], "ok"); result["data"].as_array().unwrap().clone() } }