Mountain/RPC/CocoonService/FileSystem/
Readdir.rs1
2use tonic::{Response, Status};
5
6use crate::{
7 RPC::CocoonService::CocoonServiceImpl,
8 Vine::Generated::{ReaddirRequest, ReaddirResponse},
9 dev_log,
10};
11
12pub async fn Fn(_Service:&CocoonServiceImpl, Request:ReaddirRequest) -> Result<Response<ReaddirResponse>, Status> {
13 let Path = CocoonServiceImpl::UriToPath(Request.uri.as_ref())
14 .ok_or_else(|| Status::invalid_argument("readdir: missing or empty URI"))?;
15
16 dev_log!("cocoon", "[CocoonService] Readdir: {:?}", Path);
17
18 let mut ReadDir = tokio::fs::read_dir(&Path).await.map_err(|Error| {
19 dev_log!("cocoon", "warn: [CocoonService] readdir failed for {:?}: {}", Path, Error);
20 Status::not_found(format!("readdir: {}: {}", Path.display(), Error))
21 })?;
22
23 let mut Entries = Vec::new();
24
25 while let Ok(Some(Entry)) = ReadDir.next_entry().await {
26 if let Some(Name) = Entry.file_name().to_str() {
27 Entries.push(Name.to_string());
28 }
29 }
30
31 Ok(Response::new(ReaddirResponse { entries:Entries }))
32}