1pub 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}