[Teton] Add ls and cd commands to rust impl.
This commit is contained in:
parent
c155247f1d
commit
f5a27156d2
4 changed files with 71 additions and 20 deletions
27
rust/lib/victoriafalls/src/dir.rs
Normal file
27
rust/lib/victoriafalls/src/dir.rs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
use alloc::{
|
||||
string::{String, ToString as _},
|
||||
vec::Vec,
|
||||
};
|
||||
use mammoth::zion::ZError;
|
||||
|
||||
pub fn exists(path: &str) -> Result<bool, ZError> {
|
||||
let vfs = crate::get_client();
|
||||
let result = vfs.get_directory(&crate::GetDirectoryRequest {
|
||||
path: path.to_string(),
|
||||
});
|
||||
|
||||
match result {
|
||||
Ok(_) => Ok(true),
|
||||
Err(ZError::NOT_FOUND) => Ok(false),
|
||||
Err(e) => Err(e),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn ls(path: &str) -> Result<Vec<String>, ZError> {
|
||||
let vfs = crate::get_client();
|
||||
let result = vfs.get_directory(&crate::GetDirectoryRequest {
|
||||
path: path.to_string(),
|
||||
})?;
|
||||
|
||||
Ok(result.filenames.split(',').map(|s| s.to_string()).collect())
|
||||
}
|
||||
|
|
@ -1,32 +1,14 @@
|
|||
use crate::OpenFileRequest;
|
||||
use crate::VFSClient;
|
||||
use alloc::string::ToString;
|
||||
use mammoth::zion::ZError;
|
||||
|
||||
static mut VFS_CLIENT: Option<VFSClient> = None;
|
||||
|
||||
fn get_client() -> &'static mut VFSClient {
|
||||
unsafe {
|
||||
if let None = VFS_CLIENT {
|
||||
let endpoint_cap = yellowstone::from_init_endpoint()
|
||||
.get_endpoint(&yellowstone::GetEndpointRequest {
|
||||
endpoint_name: "victoriafalls".to_string(),
|
||||
})
|
||||
.expect("Failed to get VFS endpoint");
|
||||
|
||||
VFS_CLIENT = Some(VFSClient::new(endpoint_cap.endpoint));
|
||||
}
|
||||
VFS_CLIENT.as_mut().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct File {
|
||||
memory: mammoth::mem::MemoryRegion,
|
||||
}
|
||||
|
||||
impl File {
|
||||
pub fn open(path: &str) -> Result<Self, ZError> {
|
||||
let vfs = get_client();
|
||||
let vfs = crate::get_client();
|
||||
let resp = vfs.open_file(&OpenFileRequest {
|
||||
path: path.to_string(),
|
||||
})?;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,22 @@ use core::include;
|
|||
|
||||
include!(concat!(env!("OUT_DIR"), "/yunq.rs"));
|
||||
|
||||
pub mod dir;
|
||||
pub mod file;
|
||||
|
||||
static mut VFS_CLIENT: Option<VFSClient> = None;
|
||||
|
||||
fn get_client() -> &'static mut VFSClient {
|
||||
unsafe {
|
||||
if let None = VFS_CLIENT {
|
||||
let endpoint_cap = yellowstone::from_init_endpoint()
|
||||
.get_endpoint(&yellowstone::GetEndpointRequest {
|
||||
endpoint_name: "victoriafalls".to_string(),
|
||||
})
|
||||
.expect("Failed to get VFS endpoint");
|
||||
|
||||
VFS_CLIENT = Some(VFSClient::new(endpoint_cap.endpoint));
|
||||
}
|
||||
VFS_CLIENT.as_mut().unwrap()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue