#[derive(Clone, Copy, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct VibeCapabilities {
pub log_store: bool,
pub work_store: bool,
pub network: bool,
pub encryption: bool,
pub wasm: bool,
pub tracing: bool,
pub metrics: bool,
}
impl VibeCapabilities {
pub const CURRENT: Self = Self::current();
pub const fn current() -> Self {
Self {
log_store: cfg!(feature = "log-diesel"),
work_store: cfg!(feature = "store-diesel-sqlite"),
network: false,
encryption: false,
wasm: cfg!(target_arch = "wasm32"),
tracing: false,
metrics: false,
}
}
}
impl Default for VibeCapabilities {
fn default() -> Self {
Self::current()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn current_reflects_compiled_features() {
let capabilities = VibeCapabilities::current();
assert_eq!(capabilities, VibeCapabilities::CURRENT);
assert_eq!(capabilities.log_store, cfg!(feature = "log-diesel"));
assert_eq!(
capabilities.work_store,
cfg!(feature = "store-diesel-sqlite")
);
assert!(!capabilities.network);
assert_eq!(capabilities.wasm, cfg!(target_arch = "wasm32"));
assert!(!capabilities.encryption);
assert!(!capabilities.tracing);
assert!(!capabilities.metrics);
}
}