use serde::{Deserialize, Serialize};
pub mod change_coupling;
pub mod churn;
pub mod complexity;
pub mod duplication;
pub mod git;
pub mod hotspot;
pub mod lang;
pub mod lcom;
pub mod loc;
mod walk;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ObservationMeta {
pub name: &'static str,
pub version: u32,
}
pub trait Observer {
type Output: Serialize;
fn meta(&self) -> ObservationMeta;
fn observe(&self, project_root: &std::path::Path) -> anyhow::Result<Self::Output>;
}
macro_rules! impl_workspace_builder {
($t:ty) => {
impl $t {
#[must_use]
pub fn with_workspace(mut self, workspace: Option<std::path::PathBuf>) -> Self {
self.workspace = workspace;
self
}
}
};
}
pub(crate) use impl_workspace_builder;