2 releases
0.1.5 | Jul 27, 2024 |
---|---|
0.1.1 | Jan 7, 2024 |
#379 in Compression
60 downloads per month
1MB
1K
SLoC
Contains (WOFF font, 400KB) NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2, (WOFF font, 135KB) FiraSans-Medium-8f9a781e4970d388.woff2, (WOFF font, 130KB) FiraSans-Regular-018c141bf0843ffd.woff2, (WOFF font, 82KB) SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2, (WOFF font, 77KB) SourceSerif4-Regular-46f98efaafac5295.ttf.woff2, (WOFF font, 45KB) SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 and 3 more.
roach
Rust object archive: strongly-typed persistent key value storage
roach
is a thin wrapper over redb
which allows loading and storing strongly-typed data in a customizable fashion. It is ideal for applications which need to persistently store program state or other data in a variety of ways (such as in a serialized or compressed format). The following is a simple example of how to use roach
:
use roach::*;
// Define an archive type.
struct MyArchive;
// Define a key-value pair which can be stored in the archive.
impl ArchiveType<str> for MyArchive {
// The keys will be of type string, and will be stored simply by copying the bytes.
type Key = str;
// The values will be of type [u8], and will be compressed using zstd before storage.
type Value = Zstd<[u8]>;
}
// Define another key type.
impl ArchiveType<u8> for MyArchive {
type Key = Pod<u8>;
type Value = [u8; 5];
}
// Create a new archive.
let archive = Archive::<MyArchive>::new(backend::InMemoryBackend::new()).unwrap();
// Begin a new atomic transaction.
let mut write_txn = archive.write().unwrap();
// Store something to the str table.
write_txn.set("henlo", &[5, 10, 15]).unwrap();
// Commit the transaction.
write_txn.commit().unwrap();
// Read the data back to verify that it was saved.
let read_txn = archive.read().unwrap();
assert_eq!(&read_txn.get("henlo").unwrap().unwrap(), &[5, 10, 15]);
Optional features
bytemuck - Enables the Pod
data transform, which reads the bytes of a type directly to store them.
rmp_serde - Enables the Rmp
data transform, which serializes Rust types to bytes and back.
zstd - Enables the Zstd
data transform, which compresses data before it is stored.
Dependencies
~1–3.5MB
~70K SLoC