driver_tools/subcommands/node/
mod.rs

1// Copyright 2025 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5pub mod args;
6pub mod common;
7
8pub mod subcommands;
9
10use anyhow::{Context, Result};
11use args::{NodeCommand, NodeSubcommand};
12use fidl_fuchsia_driver_development as fdd;
13use std::io::Write;
14
15pub async fn node(
16    cmd: NodeCommand,
17    writer: &mut dyn Write,
18    driver_development_proxy: fdd::ManagerProxy,
19) -> Result<()> {
20    match cmd.subcommand {
21        NodeSubcommand::List(subcmd) => {
22            subcommands::list::list_node(subcmd, writer, driver_development_proxy)
23                .await
24                .context("List subcommand failed")?;
25        }
26        NodeSubcommand::Show(subcmd) => {
27            subcommands::show::show_node(subcmd, writer, driver_development_proxy)
28                .await
29                .context("Show subcommand failed")?;
30        }
31        NodeSubcommand::Add(ref subcmd) => {
32            subcommands::add::add_node(subcmd, driver_development_proxy)
33                .await
34                .context("Add subcommand failed")?;
35        }
36        NodeSubcommand::Remove(ref subcmd) => {
37            subcommands::remove::remove_node(subcmd, driver_development_proxy)
38                .await
39                .context("Remove subcommand failed")?;
40        }
41        NodeSubcommand::Graph(subcmd) => {
42            subcommands::graph::graph_node(subcmd, writer, driver_development_proxy)
43                .await
44                .context("Graph subcommand failed")?;
45        }
46    };
47    Ok(())
48}
49
50pub async fn node_machine(
51    cmd: &NodeCommand,
52    driver_development_proxy: &fdd::ManagerProxy,
53) -> Result<Option<serde_json::Value>> {
54    match &cmd.subcommand {
55        NodeSubcommand::List(subcmd) => {
56            let nodes = subcommands::list::get_nodes(subcmd, driver_development_proxy).await?;
57            Ok(Some(serde_json::to_value(&nodes)?))
58        }
59        NodeSubcommand::Show(subcmd) => {
60            let details =
61                subcommands::show::get_node_details(subcmd, driver_development_proxy).await?;
62            Ok(Some(serde_json::to_value(&details)?))
63        }
64        _ => Ok(None),
65    }
66}