vtx_sdk/modules/io/
fs.rs

1//! Host-side VFS helpers.
2
3use crate::bindings::vtx::api::vtx_vfs::{self, Buffer, VtxObjectMeta};
4use crate::error::{VtxError, VtxResult};
5use serde::de::DeserializeOwned;
6use serde::Serialize;
7
8use super::stream::BufferExt;
9
10/// VFS buffer handle type alias.
11pub type VfsBuffer = Buffer;
12
13/// VFS object metadata type alias.
14pub type VfsObjectMeta = VtxObjectMeta;
15
16/// Opens a VFS URI and returns a `Buffer` resource handle.
17pub fn open_uri(uri: &str) -> VtxResult<Buffer> {
18    vtx_vfs::open_uri(uri).map_err(VtxError::from_host_message)
19}
20
21/// Creates an in-memory buffer (typically used for constructing response bodies).
22pub fn create_memory_buffer(data: impl AsRef<[u8]>) -> Buffer {
23    vtx_vfs::create_memory_buffer(data.as_ref())
24}
25
26/// Creates an in-memory UTF-8 buffer.
27pub fn buffer_from_string(data: &str) -> Buffer {
28    create_memory_buffer(data.as_bytes())
29}
30
31/// Creates an in-memory JSON buffer.
32pub fn buffer_from_json<T: Serialize>(data: &T) -> VtxResult<Buffer> {
33    let bytes =
34        serde_json::to_vec(data).map_err(|e| VtxError::SerializationError(e.to_string()))?;
35    Ok(create_memory_buffer(bytes))
36}
37
38/// Reads metadata for a single VFS object.
39pub fn head(uri: &str) -> VtxResult<VtxObjectMeta> {
40    vtx_vfs::head(uri).map_err(VtxError::from_host_message)
41}
42
43/// Lists objects under a prefix URI.
44pub fn list_objects(prefix_uri: &str) -> VtxResult<Vec<VtxObjectMeta>> {
45    vtx_vfs::list_objects(prefix_uri).map_err(VtxError::from_host_message)
46}
47
48/// Reads a byte range from a VFS object.
49pub fn read_range(uri: &str, offset: u64, len: u64) -> VtxResult<Vec<u8>> {
50    vtx_vfs::read_range(uri, offset, len).map_err(VtxError::from_host_message)
51}
52
53/// Reads all bytes from a VFS URI.
54pub fn read_all(uri: &str) -> VtxResult<Vec<u8>> {
55    let buffer = open_uri(uri)?;
56    Ok(buffer.read_all())
57}
58
59/// Reads all bytes from a VFS URI and decodes as UTF-8.
60pub fn read_to_string(uri: &str) -> VtxResult<String> {
61    let buffer = open_uri(uri)?;
62    buffer.read_to_string()
63}
64
65/// Reads a VFS URI and deserializes JSON into the target type.
66pub fn read_json<T: DeserializeOwned>(uri: &str) -> VtxResult<T> {
67    let buffer = open_uri(uri)?;
68    buffer.read_json()
69}