use fslite_core::{
BatchOperation, ChangeCursor, ContentQuery, CopyOptions, CreateOptions, FindQuery, LinkTarget,
MoveOptions, MutationOptions, PageRequest, ReadOptions, RemoveOptions, StatOptions,
TouchOptions, TrashId, TreeOptions, VirtualPath, WriteOptions,
};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum Command {
WorkspaceUsage,
Stat {
path: VirtualPath,
options: StatOptions,
},
Exists {
path: VirtualPath,
options: StatOptions,
},
ReadDir {
path: VirtualPath,
page: PageRequest,
},
Tree {
path: VirtualPath,
options: TreeOptions,
page: PageRequest,
},
Mkdir {
path: VirtualPath,
options: CreateOptions,
},
Read {
path: VirtualPath,
options: ReadOptions,
},
Write {
path: VirtualPath,
#[serde(with = "crate::bytes_b64")]
bytes: Vec<u8>,
options: WriteOptions,
},
WriteAt {
path: VirtualPath,
offset: u64,
#[serde(with = "crate::bytes_b64")]
bytes: Vec<u8>,
options: WriteOptions,
},
Append {
path: VirtualPath,
#[serde(with = "crate::bytes_b64")]
bytes: Vec<u8>,
options: WriteOptions,
},
Truncate {
path: VirtualPath,
length: u64,
options: MutationOptions,
},
Touch {
path: VirtualPath,
options: TouchOptions,
},
Copy {
from: VirtualPath,
to: VirtualPath,
options: CopyOptions,
},
Move {
from: VirtualPath,
to: VirtualPath,
options: MoveOptions,
},
Remove {
path: VirtualPath,
options: RemoveOptions,
},
Symlink {
target: LinkTarget,
link: VirtualPath,
options: CreateOptions,
},
ReadLink {
path: VirtualPath,
},
Trash {
path: VirtualPath,
options: MutationOptions,
},
ListTrash {
page: PageRequest,
},
Restore {
trash: TrashId,
destination: Option<VirtualPath>,
options: MutationOptions,
},
Purge {
trash: TrashId,
},
SetAttribute {
path: VirtualPath,
key: String,
#[serde(with = "crate::bytes_b64")]
value: Vec<u8>,
options: MutationOptions,
},
RemoveAttribute {
path: VirtualPath,
key: String,
options: MutationOptions,
},
Glob {
pattern: String,
page: PageRequest,
},
Find {
query: FindQuery,
page: PageRequest,
},
SearchContent {
query: ContentQuery,
page: PageRequest,
},
Changes {
after: Option<ChangeCursor>,
page: PageRequest,
},
Batch(Vec<BatchOperation>),
}