#![cfg(all(target_arch = "wasm32", feature = "opfs"))]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OpfsRequest {
pub id: u64,
pub op: OpfsOp,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum OpfsOp {
Open {
path: String,
create: bool,
create_new: bool,
read_only: bool,
},
Close {
handle_id: u32,
},
Read {
handle_id: u32,
offset: u64,
len: usize,
},
Write {
handle_id: u32,
offset: u64,
data: Vec<u8>,
},
Flush {
handle_id: u32,
},
GetSize {
handle_id: u32,
},
Truncate {
handle_id: u32,
len: u64,
},
Remove {
path: String,
},
Rename {
from: String,
to: String,
},
ListDir {
path: String,
},
MkdirAll {
path: String,
},
LockExclusive {
path: String,
},
LockShared {
path: String,
},
LockRelease {
lock_id: u32,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OpfsResponse {
pub id: u64,
pub result: OpfsResult,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum OpfsResult {
Opened { handle_id: u32 },
Locked { lock_id: u32 },
Ok,
Data { bytes: Vec<u8>, count: f64 },
Written { count: f64 },
Size { len: f64 },
Entries { names: Vec<String> },
Err { reason: String, kind: ErrKind },
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum ErrKind {
NotFound,
AlreadyExists,
PermissionDenied,
Io,
Other,
}