interstice-abi 0.5.0

WASM ABI types and host-call interfaces for the Interstice runtime
Documentation
use serde::{Deserialize, Serialize};

use crate::interstice_abi_macros::IntersticeType;

#[derive(Debug, Serialize, Deserialize)]
pub enum FileCall {
    ReadFile(ReadFileRequest),
    WriteFile(WriteFileRequest),
    ListDir(ListDirRequest),
    Metadata(MetadataRequest),
    CreateDir(CreateDirRequest),
    RemoveFile(RemoveFileRequest),
    RemoveDir(RemoveDirRequest),
    Rename(RenameRequest),
    Copy(CopyRequest),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ReadFileRequest {
    pub path: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum ReadFileResponse {
    Ok(Vec<u8>),
    Err(String),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct WriteFileRequest {
    pub path: String,
    pub data: Vec<u8>,
    pub append: bool,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum WriteFileResponse {
    Ok,
    Err(String),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ListDirRequest {
    pub path: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum ListDirResponse {
    Ok(Vec<DirEntry>),
    Err(String),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct MetadataRequest {
    pub path: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum MetadataResponse {
    Ok(FileMetadata),
    Err(String),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct CreateDirRequest {
    pub path: String,
    pub recursive: bool,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum CreateDirResponse {
    Ok,
    Err(String),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct RemoveFileRequest {
    pub path: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum RemoveFileResponse {
    Ok,
    Err(String),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct RemoveDirRequest {
    pub path: String,
    pub recursive: bool,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum RemoveDirResponse {
    Ok,
    Err(String),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct RenameRequest {
    pub from: String,
    pub to: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum RenameResponse {
    Ok,
    Err(String),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct CopyRequest {
    pub from: String,
    pub to: String,
    pub recursive: bool,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum CopyResponse {
    Ok,
    Err(String),
}

#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct DirEntry {
    pub name: String,
    pub path: String,
    pub file_type: FileType,
}

#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct FileMetadata {
    pub file_type: FileType,
    pub len: u64,
    pub readonly: bool,
    pub created: Option<u64>,
    pub modified: Option<u64>,
}

#[derive(Debug, Serialize, Deserialize, Clone)]
pub enum FileType {
    File,
    Directory,
    Symlink,
    Other,
}

#[derive(Debug, Deserialize, Serialize, IntersticeType, Clone)]
pub enum FileEvent {
    Created { path: String },
    Modified { path: String },
    Deleted { path: String },
    Renamed { from: String, to: String },
}