Expand description
ยงVirtual FileStore Abstraction for different Backends
This crate provides a unified async abstraction over multiple file storage backends, enabling consistent access to files and directories whether they are located on the local filesystem, an HTTP file index, or any other cloud storage service.
ยงโจ Features
- Unified
Store
Trait: A common trait for file and directory access across storage backends. - Streaming Reads and Writes: All file reads and writes are implemented using
tokio::io::AsyncRead
andtokio::io::AsyncWrite
for efficient streaming. - Range Requests: HTTP and pCloud support partial reads using byte-range headers.
- Metadata Support: Each backend provides basic file metadata such as size, creation, and modification time.
- Pluggable Backends: Easily extendable to support additional services like S3, FTP, or Dropbox.
ยง๐ฆ Available Backends
ยงโ
LocalStore
- Accesses files and directories directly from the local filesystem.
ยง๐ HttpStore
- Reads from public HTTP directories using HTML parsing (for Apache/Nginx-style listings).
ยงโ๏ธ PCloudStore
- Authenticates using username/password and reads from a pCloud account.
ยงโจ Backends Support
Backend | Read | Read partial | Write | Write partial (append) |
---|---|---|---|---|
Local | โ | โ | โ | โ |
Http | โ | โ (depends on server) | ๐ซ | ๐ซ |
PCoud | โ | โ | โ | ๐ซ |
ยง๐ง Usage Example
use any_storage::{Store, StoreFile};
use any_storage::local::LocalStore;
#[tokio::main]
async fn main() -> std::io::Result<()> {
let store = LocalStore::new("/some/base/path");
let file = store.get_file("file.txt").await?;
let mut reader = file.read(..).await?;
tokio::io::copy(&mut reader, &mut tokio::io::stdout()).await?;
Ok(())
}
ยง๐ Architecture
Store
: Main trait for fetching files and directories.StoreFile
andStoreDirectory
: Trait abstractions for files and folders.StoreFileReader
: Async stream wrapper over file content.StoreFileWriter
: Async stream wrapper to write to a file.- Each backend implements these traits for its own types, hiding service-specific logic behind the unified interface.
ยง๐ Security Notes
- Credentials for
PCloudStore
must be managed securely; currently supports username/password only. - HTTP support is read-only and assumes publicly exposed directory indexes.
ยง๐ฆ Crate Status
- Written in Rust 2024 Edition
- Async-first design, built on top of
tokio
,reqwest
,futures
, andbytes
.
ยง๐ง TODO / Roadmap
- More backends (S3, google drive, proton drive, etc)
Modulesยง
- any
- Module wrapping all the implementations in an enum.
- http
- Module for HTTP storage implementation.
- local
- Module for local storage implementation.
- noop
- Module for noop storage implementation.
- pcloud
- Module for pCloud storage implementation.
Structsยง
Enumsยง
- Entry
- Enum representing either a file or a directory entry.
Traitsยง
- Store
- Trait representing a generic storage system.
- Store
Directory - Trait representing a directory in the storage system.
- Store
Directory Reader - Trait for a reader that streams entries from a directory.
- Store
File - Trait representing a file in the storage system.
- Store
File Reader - Trait representing a reader that can asynchronously read the contents of a file.
- Store
File Writer - Trait representing a writer that can asynchronously write the contents to a file.
- Store
Metadata - Trait representing the metadata of a file.