| Crates.io | storable_vec |
| lib.rs | storable_vec |
| version | 0.1.3 |
| created_at | 2025-01-15 10:47:08.796411+00 |
| updated_at | 2025-02-19 11:14:37.852233+00 |
| description | A very small, fast, efficient and simple storable Vec |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1517370 |
| size | 37,958 |
A very small, fast, efficient and simple storable vec which uses mmap2 for speed.
use std::path::Path;
use storable_vec::{AnyStorableVec, StorableVec};
fn main() -> color_eyre::Result<()> {
color_eyre::install()?;
{
let mut vec: StorableVec<usize, u32> = StorableVec::import(Path::new("./v"))?;
vec.push(21);
dbg!(vec.get(0)?); // 21
vec.flush()?;
}
{
let vec: StorableVec<usize, u32> = StorableVec::import(Path::new("./v"))?;
dbg!(vec.get(0)?); // 21
}
Ok(())
}
Portability will depend on the type of values.
Non bytes/slices types (u8, u16, ...) will be read as slice in an unsafe manner (using std::slice::from_raw_parts) and thus have the endianness of the system. On the other hand, &[u8] should be inserted as is.
If portability is important to you, just create a wrapper struct which has custom get, push, ... methods and does something like:
impl StorableVecU64 {
pub fn push(&mut self, value: u64) {
self.push(&value.to_be_bytes())
}
}