You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
995 B
40 lines
995 B
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::<Vec<&str>>() |
|
.as_ref(), |
|
) |
|
} |
|
|
|
pub fn check_output(args: &str) -> Vec<Value> { |
|
let result = Self::output(args); |
|
assert_eq!(result["status"], "ok"); |
|
result["data"].as_array().unwrap().clone() |
|
} |
|
}
|
|
|