Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/FileSystem/
Readdir.rs

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