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
//! Core types, traits, and services for the `evault` workspace.
//!
//! `evault-core` is intentionally backend-agnostic. It defines:
//!
//! - The **domain model**: variables, projects, profiles, audit entries.
//! - The **trait contracts** that every IO concern must implement, such as
//! [`MetadataStore`](crate::traits::MetadataStore),
//! [`SecretStore`](crate::traits::SecretStore),
//! [`AuditSink`](crate::traits::AuditSink),
//! [`ManifestIo`](crate::traits::ManifestIo),
//! [`Materializer`](crate::traits::Materializer),
//! [`CodeScanner`](crate::traits::CodeScanner),
//! [`ProcessRunner`](crate::traits::ProcessRunner),
//! [`Clock`](crate::traits::Clock) and
//! [`IdGenerator`](crate::traits::IdGenerator).
//! - A few **value types** for handling secrets safely
//! (see [`crypto::SecretString`] and [`crypto::MasterKey`]).
//!
//! Concrete implementations live in sibling crates such as
//! `evault-store-sqlcipher`, `evault-store-keyring`, `evault-store-memory`,
//! `evault-manifest`, `evault-runner`, `evault-materializer`, and
//! `evault-scanner-regex`.
//!
//! # Quick tour
//!
//! ```
//! use evault_core::model::{Var, Group, VarKind};
//!
//! let v = Var::new("DATABASE_URL", Group::User, VarKind::Secret);
//! assert_eq!(v.name(), "DATABASE_URL");
//! assert_eq!(v.group(), &Group::User);
//! ```