Crate random_access_memory
source ·Expand description
Continuously read and write to memory using random offsets and lengths
RandomAccessMemory is a complete implementation of random-access-storage for in-memory storage.
See also random-access-disk for on-disk storage that can be swapped with this.
Examples
Reading, writing, deleting and truncating:
use random_access_storage::RandomAccess;
use random_access_memory::RandomAccessMemory;
let mut storage = RandomAccessMemory::default();
storage.write(0, b"hello").await.unwrap();
storage.write(5, b" world").await.unwrap();
assert_eq!(storage.read(0, 11).await.unwrap(), b"hello world");
assert_eq!(storage.len().await.unwrap(), 11);
storage.del(5, 2).await.unwrap();
assert_eq!(storage.read(5, 2).await.unwrap(), [0, 0]);
assert_eq!(storage.len().await.unwrap(), 11);
storage.truncate(2).await.unwrap();
assert_eq!(storage.len().await.unwrap(), 2);
storage.truncate(5).await.unwrap();
assert_eq!(storage.len().await.unwrap(), 5);
assert_eq!(storage.read(0, 5).await.unwrap(), [b'h', b'e', 0, 0, 0]);
In order to get benefits from the swappable interface, you will in most cases want to use generic functions for storage manipulation:
use random_access_storage::RandomAccess;
use random_access_memory::RandomAccessMemory;
use std::fmt::Debug;
let mut storage = RandomAccessMemory::default();
write_hello_world(&mut storage).await;
assert_eq!(read_hello_world(&mut storage).await, b"hello world");
/// Write with swappable storage
async fn write_hello_world<T>(storage: &mut T)
where T: RandomAccess + Debug + Send,
{
storage.write(0, b"hello").await.unwrap();
storage.write(5, b" world").await.unwrap();
}
/// Read with swappable storage
async fn read_hello_world<T>(storage: &mut T) -> Vec<u8>
where T: RandomAccess + Debug + Send,
{
storage.read(0, 11).await.unwrap()
}
Structs
- In-memory storage for random access