Crates.io | bevy_pkv |
lib.rs | bevy_pkv |
version | |
source | src |
created_at | 2022-04-25 15:04:40.121303 |
updated_at | 2024-11-30 11:03:45.614417 |
description | Persistent key value store for apps/games |
homepage | |
repository | https://github.com/johanhelsing/bevy_pkv |
max_upload_size | |
id | 573918 |
Cargo.toml error: | TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
bevy_pkv
is a cross-platform persistent key value store for rust apps.
Use it for storing things like settings, save games etc.
Currently, the Bevy dependency is optional, so it may be used in other games/apps as well.
Add a store resource to your app
# #[cfg(feature = "bevy")] { // ignore this line
use bevy::prelude::*;
use bevy_pkv::PkvStore;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.insert_resource(PkvStore::new("FooCompany", "BarGame"))
// ...insert systems etc.
.run();
}
# }
This will create or load a store in the appropriate location for your system, and make it available to bevy systems:
fn setup(mut pkv: ResMut<PkvStore>) {
if let Ok(username) = pkv.get::<String>("username") {
info!("Welcome back {username}");
} else {
pkv.set_string("username", "alice")
.expect("failed to store username");
// alternatively, using the slightly less efficient generic api:
pkv.set("username", &"alice".to_string())
.expect("failed to store username");
}
}
Using your own types implementing serde::Serialize
and Deserialize
:
#[derive(Serialize, Deserialize)]
struct User {
name: String,
}
fn setup(mut pkv: ResMut<PkvStore>) {
if let Ok(user) = pkv.get::<User>("user") {
info!("Welcome back {}", user.name);
} else {
let user = User {
name: "bob".to_string(),
};
pkv.set("user", &user).expect("failed to store user");
}
}
See the examples for further usage
Disable the default features when adding the dependency:
bevy_pkv = {version = "0.9", default-features = false}
redb
and rmp_serde
(MessagePack) is used for storage. It's creating a bevy_pkv.redb
db in the appropriate application data directory for your system.
Alternatively, disable default-features and enable the rocksdb
feature to use a RocksDB-based implementation or sled
feature to use sled db.
Window.localStorage
and serde_json
is used for storage. Perhaps IndexedDb and something else would have been a better choice, but its API is complicated, and I wanted a simple implementation and a simple synchronous API.
The main
branch targets the latest bevy release.
bevy | bevy_pkv |
---|---|
0.15 | 0.12, main |
0.14 | 0.11 |
0.13 | 0.10 |
0.12 | 0.9 |
0.11 | 0.8 |
0.10 | 0.7 |
0.9 | 0.6 |
0.8 | 0.5 |
0.7 | 0.2, 0.3, 0.4 |
0.6 | 0.1 |
MIT or Apache-2.0