driver_tools/
lib.rs

1// Copyright 2022 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;
6mod common;
7mod subcommands;
8
9use anyhow::{Context, Result};
10use args::{DriverCommand, DriverSubCommand};
11use driver_connector::DriverConnector;
12use std::io;
13
14pub async fn driver(
15    cmd: DriverCommand,
16    driver_connector: impl DriverConnector,
17    writer: &mut dyn io::Write,
18) -> Result<()> {
19    match cmd.subcommand {
20        DriverSubCommand::Dump(subcmd) => {
21            let driver_development_proxy = driver_connector
22                .get_driver_development_proxy(subcmd.select)
23                .await
24                .context("Failed to get driver development proxy")?;
25            subcommands::dump::dump(subcmd, writer, driver_development_proxy)
26                .await
27                .context("Dump subcommand failed")?;
28        }
29        DriverSubCommand::List(subcmd) => {
30            let driver_development_proxy = driver_connector
31                .get_driver_development_proxy(subcmd.select)
32                .await
33                .context("Failed to get driver development proxy")?;
34            subcommands::list::list(subcmd, writer, driver_development_proxy)
35                .await
36                .context("List subcommand failed")?;
37        }
38        DriverSubCommand::ListComposites(subcmd) => {
39            let driver_development_proxy = driver_connector
40                .get_driver_development_proxy(subcmd.select)
41                .await
42                .context("Failed to get driver development proxy")?;
43            subcommands::list_composites::list_composites(subcmd, writer, driver_development_proxy)
44                .await
45                .context("List composites subcommand failed")?;
46        }
47        DriverSubCommand::ListDevices(subcmd) => {
48            let driver_development_proxy = driver_connector
49                .get_driver_development_proxy(subcmd.select)
50                .await
51                .context("Failed to get driver development proxy")?;
52            subcommands::list_devices::list_devices(subcmd, driver_development_proxy)
53                .await
54                .context("List-devices subcommand failed")?;
55        }
56        DriverSubCommand::ListHosts(subcmd) => {
57            let driver_development_proxy = driver_connector
58                .get_driver_development_proxy(subcmd.select)
59                .await
60                .context("Failed to get driver development proxy")?;
61            subcommands::list_hosts::list_hosts(subcmd, driver_development_proxy)
62                .await
63                .context("List-hosts subcommand failed")?;
64        }
65        DriverSubCommand::ListCompositeNodeSpecs(subcmd) => {
66            let driver_development_proxy = driver_connector
67                .get_driver_development_proxy(subcmd.select)
68                .await
69                .context("Failed to get driver development proxy")?;
70            subcommands::list_composite_node_specs::list_composite_node_specs(
71                subcmd,
72                writer,
73                driver_development_proxy,
74            )
75            .await
76            .context("list-composite-node-specs subcommand failed")?;
77        }
78        DriverSubCommand::Register(subcmd) => {
79            let driver_registrar_proxy = driver_connector
80                .get_driver_registrar_proxy(subcmd.select)
81                .await
82                .context("Failed to get driver registrar proxy")?;
83            let driver_development_proxy = driver_connector
84                .get_driver_development_proxy(subcmd.select)
85                .await
86                .context("Failed to get driver development proxy")?;
87            subcommands::register::register(
88                subcmd,
89                writer,
90                driver_registrar_proxy,
91                driver_development_proxy,
92            )
93            .await
94            .context("Register subcommand failed")?;
95        }
96        DriverSubCommand::Restart(subcmd) => {
97            let driver_development_proxy = driver_connector
98                .get_driver_development_proxy(subcmd.select)
99                .await
100                .context("Failed to get driver development proxy")?;
101            subcommands::restart::restart(subcmd, writer, driver_development_proxy)
102                .await
103                .context("Restart subcommand failed")?;
104        }
105        #[cfg(not(target_os = "fuchsia"))]
106        DriverSubCommand::StaticChecks(subcmd) => {
107            static_checks_lib::static_checks(subcmd, writer)
108                .await
109                .context("StaticChecks subcommand failed")?;
110        }
111        DriverSubCommand::TestNode(subcmd) => {
112            let driver_development_proxy = driver_connector
113                .get_driver_development_proxy(subcmd.select)
114                .await
115                .context("Failed to get driver development proxy")?;
116            subcommands::test_node::test_node(&subcmd, driver_development_proxy)
117                .await
118                .context("AddTestNode subcommand failed")?;
119        }
120        DriverSubCommand::Disable(subcmd) => {
121            let driver_development_proxy = driver_connector
122                .get_driver_development_proxy(subcmd.select)
123                .await
124                .context("Failed to get driver development proxy")?;
125            subcommands::disable::disable(subcmd, writer, driver_development_proxy)
126                .await
127                .context("Disable subcommand failed")?;
128        }
129        DriverSubCommand::Node(subcmd) => {
130            let driver_development_proxy = driver_connector
131                .get_driver_development_proxy(cmd.select)
132                .await
133                .context("Failed to get driver development proxy")?;
134            subcommands::node::node(subcmd, writer, driver_development_proxy)
135                .await
136                .context("Node subcommand failed")?;
137        }
138        DriverSubCommand::Host(subcmd) => {
139            let driver_development_proxy = driver_connector
140                .get_driver_development_proxy(cmd.select)
141                .await
142                .context("Failed to get driver development proxy")?;
143            subcommands::host::host(subcmd, writer, driver_development_proxy)
144                .await
145                .context("Host subcommand failed")?;
146        }
147    };
148    Ok(())
149}