component_debug/cli/
storage.rs1use crate::storage::{copy, delete, delete_all, list, make_directory};
6use anyhow::{format_err, Result};
7use moniker::Moniker;
8
9use flex_client::ProxyHasDomain;
10use flex_fuchsia_sys2 as fsys;
11
12async fn get_storage_admin(
13 realm_query: fsys::RealmQueryProxy,
14 storage_provider_moniker: String,
15 storage_capability_name: String,
16) -> Result<fsys::StorageAdminProxy> {
17 let storage_provider_moniker = Moniker::parse_str(&storage_provider_moniker).map_err(|e| {
18 format_err!("Error: {} is not a valid moniker ({})", storage_provider_moniker, e)
19 })?;
20
21 let (storage_admin, server_end) =
22 realm_query.domain().create_proxy::<fsys::StorageAdminMarker>();
23
24 realm_query
25 .connect_to_storage_admin(
26 &storage_provider_moniker.to_string(),
27 &storage_capability_name,
28 server_end,
29 )
30 .await?
31 .map_err(|e| {
32 format_err!(
33 "Failed to get StorageAdmin proxy for capability '{}' of instance '{}': {:?}",
34 storage_capability_name,
35 storage_provider_moniker,
36 e
37 )
38 })?;
39
40 Ok(storage_admin)
41}
42
43pub async fn storage_copy_cmd(
44 storage_provider_moniker: String,
45 storage_capability_name: String,
46 source_path: String,
47 destination_path: String,
48 realm_query: fsys::RealmQueryProxy,
49) -> Result<()> {
50 let storage_admin =
51 get_storage_admin(realm_query, storage_provider_moniker, storage_capability_name).await?;
52 copy(storage_admin, source_path, destination_path).await
53}
54
55pub async fn storage_list_cmd<W: std::io::Write>(
56 storage_provider_moniker: String,
57 storage_capability_name: String,
58 path: String,
59 realm_query: fsys::RealmQueryProxy,
60 mut writer: W,
61) -> Result<()> {
62 let storage_admin =
63 get_storage_admin(realm_query, storage_provider_moniker, storage_capability_name).await?;
64 let entries = list(storage_admin, path).await?;
65
66 for entry in entries {
67 writeln!(writer, "{}", entry)?;
68 }
69 Ok(())
70}
71
72pub async fn storage_make_directory_cmd(
73 storage_provider_moniker: String,
74 storage_capability_name: String,
75 path: String,
76 realm_query: fsys::RealmQueryProxy,
77) -> Result<()> {
78 let storage_admin =
79 get_storage_admin(realm_query, storage_provider_moniker, storage_capability_name).await?;
80 make_directory(storage_admin, path).await
81}
82
83pub async fn storage_delete_cmd(
84 storage_provider_moniker: String,
85 storage_capability_name: String,
86 path: String,
87 realm_query: fsys::RealmQueryProxy,
88) -> Result<()> {
89 let storage_admin =
90 get_storage_admin(realm_query, storage_provider_moniker, storage_capability_name).await?;
91 delete(storage_admin, path).await
92}
93
94pub async fn storage_delete_all_cmd(
95 storage_provider_moniker: String,
96 storage_capability_name: String,
97 moniker: String,
98 realm_query: fsys::RealmQueryProxy,
99) -> Result<()> {
100 let storage_admin =
101 get_storage_admin(realm_query, storage_provider_moniker, storage_capability_name).await?;
102 delete_all(storage_admin, moniker).await
103}