browser_control/cli/
list.rs1use anyhow::Result;
4
5use crate::cli::output::{print_json, print_table};
6use crate::detect;
7use crate::registry::Registry;
8
9pub fn run_list_installed(json: bool) -> Result<()> {
11 let installed = detect::list_installed();
12 if json {
13 print_json(&mut std::io::stdout(), &installed)?;
14 } else {
15 let headers = ["KIND", "VERSION", "ENGINE", "EXECUTABLE"];
16 let rows = installed
17 .iter()
18 .map(|i| {
19 vec![
20 i.kind.as_str().to_string(),
21 i.version.clone(),
22 format!("{:?}", i.engine).to_lowercase(),
23 i.executable.display().to_string(),
24 ]
25 })
26 .collect::<Vec<_>>();
27 print_table(&mut std::io::stdout(), &headers, &rows)?;
28 }
29 Ok(())
30}
31
32pub fn run_list_running(json: bool) -> Result<()> {
34 let reg = Registry::open()?;
35 let alive = reg.list_alive()?;
36 if json {
37 print_json(&mut std::io::stdout(), &alive)?;
38 } else {
39 let headers = [
40 "NAME", "KIND", "PID", "ENGINE", "ENDPOINT", "PROFILE", "STARTED",
41 ];
42 let rows = alive
43 .iter()
44 .map(|r| {
45 vec![
46 r.name.clone(),
47 r.kind.as_str().to_string(),
48 r.pid.to_string(),
49 format!("{:?}", r.engine).to_lowercase(),
50 r.endpoint.clone(),
51 r.profile_dir.display().to_string(),
52 r.started_at.clone(),
53 ]
54 })
55 .collect::<Vec<_>>();
56 print_table(&mut std::io::stdout(), &headers, &rows)?;
57 }
58 Ok(())
59}