pub mod admin_reads;
pub mod break_glass;
pub mod bridge;
pub mod drift;
pub mod lifecycle;
pub mod migrate;
pub mod model;
pub mod ops;
pub mod policy;
pub mod pr_gate;
pub mod projection;
pub mod reproject;
pub mod role_map;
pub mod rules;
pub mod single_admin;
pub mod store;
pub mod tasks;
pub mod view;
pub mod wire;
#[cfg(test)]
mod tests;
use std::collections::BTreeMap;
use std::sync::Arc;
use serde::{Deserialize, Serialize};
use vti_common::store::KeyspaceHandle;
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
#[serde(deny_unknown_fields)]
pub struct GitNsConfig {
#[serde(default)]
pub bridges: BTreeMap<String, String>,
#[serde(default = "default_true")]
pub elevated_requires_admin: bool,
#[serde(default = "default_tick")]
pub tick_seconds: u64,
}
fn default_true() -> bool {
true
}
fn default_tick() -> u64 {
5
}
impl Default for GitNsConfig {
fn default() -> Self {
Self {
bridges: BTreeMap::new(),
elevated_requires_admin: true,
tick_seconds: default_tick(),
}
}
}
#[derive(Clone)]
pub struct GitNsHandles {
pub ks: KeyspaceHandle,
pub acl_ks: KeyspaceHandle,
pub jobs_ks: KeyspaceHandle,
pub projection_ks: KeyspaceHandle,
pub bridge: Arc<dyn bridge::BridgeClient>,
}
impl GitNsHandles {
pub fn open_unconnected(
store: &vti_common::store::Store,
) -> Result<Self, vti_common::error::AppError> {
use crate::store::keyspaces;
Ok(Self {
ks: store.keyspace(keyspaces::GIT_NS)?,
acl_ks: store.keyspace(keyspaces::ACL)?,
jobs_ks: store.keyspace(keyspaces::GIT_NS_JOBS)?,
projection_ks: store.keyspace(keyspaces::GIT_NS_PROJECTION)?,
bridge: Arc::new(bridge::MessagingBridgeClient::new(
Arc::new(tokio::sync::OnceCell::new()),
None,
crate::hooks::PendingReplies::new(),
None,
)),
})
}
}