#random-access #interface #instance #abstract #storage #traits #back-end

random-access-storage

Abstract interface to implement random-access instances

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

Download history 77/week @ 2024-07-22 101/week @ 2024-07-29 37/week @ 2024-08-05 51/week @ 2024-08-12 31/week @ 2024-08-19 66/week @ 2024-08-26 120/week @ 2024-09-02 181/week @ 2024-09-09 21/week @ 2024-09-16 171/week @ 2024-09-23 81/week @ 2024-09-30 7/week @ 2024-10-07 23/week @ 2024-10-14 120/week @ 2024-10-21 44/week @ 2024-10-28 15/week @ 2024-11-04

202 downloads per month
Used in 10 crates (6 directly)

MIT/Apache

14KB
57 lines

random-access-storage

crates.io version build status downloads docs.rs docs

Abstract interface to implement random-access instances.

Installation

$ cargo add random-access-storage

See Also

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:

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