aboutsummaryrefslogtreecommitdiff
path: root/lockchain-core/src/initialise.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lockchain-core/src/initialise.rs')
-rw-r--r--lockchain-core/src/initialise.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/lockchain-core/src/initialise.rs b/lockchain-core/src/initialise.rs
new file mode 100644
index 0000000..6ae48a9
--- /dev/null
+++ b/lockchain-core/src/initialise.rs
@@ -0,0 +1,55 @@
+//! A shared initialisation block for vaults
+//!
+//! All vaults, regardless of backends
+//! or persistence layer
+//! share the same common principles
+//! of users and permissions.
+//!
+//! This means that intiailisation is shared,
+//! regardless of what backend implements it.
+//!
+//! A `VaultGenerator` takes arguments
+//! for a generic backend,
+//! calls functions provided by said backend
+//! and then returns the actual backend.
+
+use traits::{Body, Vault};
+
+/// A generator is initialised with a generic backend
+/// which can then chain-call functions to setup the
+/// base functionality of a Vault, and then yield
+/// a working and initialised instance of the
+/// generic vault backend.
+pub struct Generator {
+ #[doc(hidden)]
+ pub name: Option<String>,
+ #[doc(hidden)]
+ pub location: Option<String>,
+}
+
+impl Generator {
+ /// Start a new generator for a generic type
+ pub fn new() -> Self {
+ Self {
+ name: None,
+ location: None,
+ }
+ }
+
+ pub fn path<S: Into<String>>(self, name: S, location: S) -> Self {
+ Self {
+ name: Some(name.into()),
+ location: Some(location.into()),
+ ..self
+ }
+ }
+
+ /// Finally call this function to construct the vault
+ pub fn finalise<V, B>(self) -> V
+ where
+ V: Vault<B>,
+ B: Body,
+ {
+ V::new(self)
+ }
+}