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