1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//! # GDDB
//!
//! GDDB is a superfast in-memory database designed for use in Godot.
//!
//! This database aims to provide an easy frontend to an efficient in-memory database, that can be saved and reloaded.
//!
//! GDDB saves a Godot dictionary and provides an interface to create, update, retrieve (either single results or all items matching the search) and destroy records.
//!
//! GDDB started as a fork of [TinyDB](https://github.com/Owez/tinydb) with added functionality and a Godot wrapper.
//!
//! - [Documentation](https://docs.rs/gddb)
//! - [Crates.io](https://crates.io/crates/gddb)
//!
//! ## Rust Example 🚀
//!
//! An example of utilising GDDB within your Rust library.
//!
//! ```rust
//! use serde::{Serialize, Deserialize};
//! use gddb::Database;
//!
//! #[derive(Debug, Eq, PartialEq, Hash, Serialize, Deserialize, Clone)]
//! struct PlayerStruct {
//! name: String
//! }
//!
//! fn main() {
//! let player = PlayerStruct { name: "Joe Bloggs".into() };
//! let mut db = Database::new("GAME", None, false);
//!
//! db.create(my_struct.clone());
//!
//! let results = db.find(|s: &PlayerStruct| &s.name, "Joe Bloggs".into());
//!
//! assert_eq!(results.unwrap(), &player);
//! }
//! ```
//!
//! # Installation
//!
//! Simply add the following to your `Cargo.toml` file:
//!
//! ```toml
//! [dependencies]
//! gddb = "0.3.0"
//! ```
//! # Implementation notes
//!
//! - This database does not save 2 duplicated items, either ignoring or raising an
//! error depending on end-user preference.
//! - This project is not intended to be used inside of any critical systems due to
//! the nature of dumping/recovery. If you are using this crate as a temporary and
//! in-memory only database, it should preform at a reasonable speed (as it uses
//! [HashSet] underneath).
//!
//! # Essential operations
//!
//! Some commonly-used operations for the [Database] structure.
//!
//! | Operation | Implamentation |
//! |-----------------------------------------|-----------------------|
//! | Create database | [Database::new] |
//! | Create database from file | [Database::from] |
//! | Load database or create if non-existant | [Database::auto_from] |
//! | Query all matching items | [Database::query] |
//! | Query for item | [Database::find] |
//! | Contains specific item | [Database::contains] |
//! | Update/replace item | [Database::update] |
//! | Delete item | [Database::destroy] |
//! | Dump database | [Database::dump_db] |
use *;
use *;
godot_init!;