evault_core/lib.rs
1//! Core types, traits, and services for the `evault` workspace.
2//!
3//! `evault-core` is intentionally backend-agnostic. It defines:
4//!
5//! - The **domain model**: variables, projects, profiles, audit entries.
6//! - The **trait contracts** that every IO concern must implement, such as
7//! [`MetadataStore`](crate::traits::MetadataStore),
8//! [`SecretStore`](crate::traits::SecretStore),
9//! [`AuditSink`](crate::traits::AuditSink),
10//! [`ManifestIo`](crate::traits::ManifestIo),
11//! [`Materializer`](crate::traits::Materializer),
12//! [`CodeScanner`](crate::traits::CodeScanner),
13//! [`ProcessRunner`](crate::traits::ProcessRunner),
14//! [`Clock`](crate::traits::Clock) and
15//! [`IdGenerator`](crate::traits::IdGenerator).
16//! - A few **value types** for handling secrets safely
17//! (see [`crypto::SecretString`] and [`crypto::MasterKey`]).
18//!
19//! Concrete implementations live in sibling crates such as
20//! `evault-store-sqlcipher`, `evault-store-keyring`, `evault-store-memory`,
21//! `evault-manifest`, `evault-runner`, `evault-materializer`, and
22//! `evault-scanner-regex`.
23//!
24//! # Quick tour
25//!
26//! ```
27//! use evault_core::model::{Var, Group, VarKind};
28//!
29//! let v = Var::new("DATABASE_URL", Group::User, VarKind::Secret);
30//! assert_eq!(v.name(), "DATABASE_URL");
31//! assert_eq!(v.group(), &Group::User);
32//! ```
33#![forbid(unsafe_code)]
34
35pub mod crypto;
36pub mod error;
37pub mod model;
38pub mod service;
39pub mod traits;