use microsandbox::{FsBackend, PassthroughFs};
use std::io;
struct EncryptedFs { key: [u8; 32], inner: PassthroughFs }
impl FsBackend for EncryptedFs {
fn read(&self, ctx: Context, inode: u64, handle: u64,
buf: &mut [u8], offset: u64) -> io::Result<usize> {
let n = self.inner.read(ctx, inode, handle, buf, offset)?;
self.decrypt_in_place(&mut buf[..n]);
Ok(n)
}
fn write(&self, ctx: Context, inode: u64, handle: u64,
buf: &[u8], offset: u64) -> io::Result<usize> {
let encrypted = self.encrypt(buf);
self.inner.write(ctx, inode, handle, &encrypted, offset)
}
// ... remaining methods delegate to self.inner
}
let sb = Sandbox::builder("custom")
.volume("/secrets", |v| v.backend(EncryptedFs::new(key, "/data")?))
.create().await?;