pub mod benchmarks;
pub mod cache;
pub mod config;
pub mod display;
pub mod events;
pub mod posthog;
pub mod repo_shape;
use anyhow::Result;
use config::TelemetryState;
pub enum Telemetry {
Active(TelemetryState),
Disabled,
}
impl Telemetry {
pub fn is_enabled(&self) -> bool {
matches!(self, Telemetry::Active(_))
}
}
pub fn init() -> Result<Telemetry> {
let user_config = crate::config::UserConfig::load()?;
let file_enabled = user_config.telemetry.enabled;
let has_env_override =
std::env::var("DO_NOT_TRACK").is_ok() || std::env::var("REPOTOIRE_TELEMETRY").is_ok();
let effective_enabled = if config::should_prompt(file_enabled, has_env_override) {
match config::show_opt_in_prompt() {
Some(choice) => {
let _ = config::save_telemetry_choice(choice);
Some(choice)
}
None => Some(false), }
} else {
file_enabled
};
let state = config::TelemetryState::resolve_with_env(
effective_enabled,
std::env::var("DO_NOT_TRACK").ok().as_deref(),
std::env::var("REPOTOIRE_TELEMETRY").ok().as_deref(),
);
if state.is_enabled() {
let state = config::TelemetryState::load()?;
Ok(Telemetry::Active(state))
} else {
Ok(Telemetry::Disabled)
}
}