dbstruct
Derive a database from a struct
This is an early release, the API is mostly stable but might still change
Create a typed embedded database by defining a struct. Interact with the database through getters and setters. Choose how values missing in the database are represented. Standard library types Vec
, HashMap
and Option
have special getters and setters to mimic their standard library functionality. You can push and pop from vecs.
Choose out of various popular key-value databases then instantiate the struct providing only the db path. Alternatively pass any object that implements dbstruct::DataStore
.
Use case
dbstruct is ideal when:
- Writing a simple app that needs some form of persistence.
- Quickly getting a storage layer done when developing a system that you can later replace.
Example
use Path;
Out of the box support
Name | advantage | attribute option |
---|---|---|
Sled | pure Rust | db=sled |
BTreeMap, does not store anything! | testing | db=btreemap |
work in progress: rocksdb
Future Work
These are some features I am planning to work on, in no particular order. If you miss anything please let me know via an issue!
- Example workflow for migrations.
- Allow access from multiple threads cloning the struct
- Flushing the database, explicitly via a function on the struct and implicitly whenever a field changes. Will be configurable through an attribute on the struct and a field specifically.
- Expand the wrapper API to more closely match that of their standard library counterparts.
- Async support for flushing the database.
- Figure out how to represent transactions (hard if even possible)
Similar Crates
- SQLx
- cornucopia Generate type-checked Rust from your PostgreSQL.
- losfair/RefineDB A strongly-typed document database that runs on any transactional key-value store
- chronicl/typed-sled builds on top of sled and offers an API that is similar to a
BTreeMap<K, V>
- sea-orm a relational ORM to help you build web services in Rust with the familiarity of dynamic languages
- native_db embedded database for multi-platform apps. Sync Rust types effortlessly.