12 releases (5 stable)
5.0.0 | Apr 12, 2023 |
---|---|
4.0.0 | Mar 3, 2020 |
3.0.0 | Jul 27, 2019 |
2.0.0 | Dec 18, 2018 |
0.3.0 | Mar 21, 2018 |
#809 in Asynchronous
202 downloads per month
Used in 10 crates
(6 directly)
14KB
57 lines
random-access-storage
Abstract interface to implement random-access instances.
Installation
$ cargo add random-access-storage
See Also
- Original Javascript random-access-storage
License
MIT OR Apache-2.0
lib.rs
:
Abstract interface to implement random-access instances
This crate defines the shared [RandomAccess] trait that makes it possible to create different backends for reading, writing and deleting bytes. With a shared interface, implementations can easily be swapped, depending on the needs and the environment.
Known Implementations
Full implementations of [RandomAccess] include:
- random-access-memory for in-memory storage
- random-access-disk for disk storage
Examples
Your own random-access backend can be implemented like this:
use random_access_storage::{RandomAccess, RandomAccessError};
use async_trait::async_trait;
struct MyRandomAccess {
// Add fields here
}
#[async_trait]
impl RandomAccess for MyRandomAccess {
async fn write(&mut self, _offset: u64, _data: &[u8]) -> Result<(), RandomAccessError> {
unimplemented!();
}
async fn read(&mut self, _offset: u64, _length: u64) -> Result<Vec<u8>, RandomAccessError> {
unimplemented!();
}
async fn del(&mut self, _offset: u64, _length: u64) -> Result<(), RandomAccessError> {
unimplemented!();
}
async fn truncate(&mut self, _length: u64) -> Result<(), RandomAccessError> {
unimplemented!();
}
async fn len(&mut self) -> Result<u64, RandomAccessError> {
unimplemented!();
}
async fn is_empty(&mut self) -> Result<bool, RandomAccessError> {
unimplemented!();
}
async fn sync_all(&mut self) -> Result<(), RandomAccessError> {
unimplemented!();
}
}
Dependencies
~255–720KB
~17K SLoC