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
//! QuickKV is a simple key-value database written in Rust Its goal is to allow thread safe access to a database file with minimal
//! overhead It is not meant to be a replacement for a full fledged database, but rather a simple way to store data.
//!
//! # Features
//!
//! - Simplistic API
//! - Serde Supported Data Types
//! - Thread safe
//!
//! ## Useful Links
//
// [Documentation] | [Crates.io] | [Github]
//!
//! # Installation
//!
//! ```shell
//! cargo add quick-kv --features full
//! ```
//! # Why use QuickKV?
//! QuickKV is a file persistent database that is meant to be used for simple or complex data structures. It is not meant to be a
//! replacement for a full fledged database, but rather a simple way to store data in a reliable, thread safe way.
//!
//! # Why not use QuickKV?
//! QuickKV is a local database. There are no plans for a server implementation. If you need a database that can be accessed by
//! multiple machines, you should look elsewhere. QuickKV also does not support async operations. It is designed to be used in a
//! synchronous environment.
//!
//! # Which Client Should I Use?
//!
//! QuickKV has two clients, [QuickClientMini] and [QuickClient].
//!
//!  ## QuickClientMini
//! [QuickClientMini] is the simplest client. It allows you to CRUD data of any type by leveraging per method generics. It is the
//! recommended client if you have very inconsistent data you want to store in the database or don't
//! need high performance read times.
//!
//! Pros:
//! - Can store any type of data
//! - No need to define a schema
//! - Simple API
//! - Database can store multiple types of data
//!
//! Cons:
//! - Does not use multi-threading for internal operations
//! - No caching
//! - No strict schema
//! - Lots of type conversions to have type safety
//! - No Complex APIs for advanced operations
//!
//! ## QuickClient
//! [QuickClient] is a client that is optimized for a specific schema and has multi-threading enabled by default. This client
//! is built for speed and is recommended if you want to take advanced of cached data and multi-threading.
//!
//! Pros:
//! - Uses multi-threading for internal operations
//! - Internal caching
//! - Strict schema
//! - Type safety
//!
//! Cons:
//! - Must define a schema
//! - Must use a specific type for all data
//! - Database can only store one type of data
//! - More complex API
//!
//! Both clients have there own pros and cons. It is up to you to decide which client is best for your use case.
//!
//! # Examples
//!
//! Examples can be found in the [examples] directory.
//!
//! [QuickClientMini]: client/mini/struct.QuickClientMini.html
//! [QuickClient]: client/default/struct.QuickClient.html
//! [QuickConfiguration]: struct.QuickConfiguration.html
//! [examples]: https://github.com/ThatGuyJamal/quick-kv/tree/master/examples
//!
//! [Documentation]: https://docs.rs/quick-kv
//! [Crates.io]: https://crates.io/crates/quick-kv
//! [Github]: https://github.com/ThatGuyJamal/quick-kv

pub mod client;
pub mod prelude;
pub mod types;

#[cfg(test)]
mod test;