From 6cee3e192658a274f7eda8169d6f652c0b163e14 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sat, 7 Mar 2026 22:03:58 -0500 Subject: [PATCH] DRY up telemetry ID loading and Telemetry construction Extract read_existing_id() helper to deduplicate file-read-trim-check pattern, and extract private Telemetry::new() to consolidate for_server/for_cli. Co-Authored-By: Claude Opus 4.6 --- crates/arc-util/src/telemetry/anonymous_id.rs | 24 ++++++++-------- crates/arc-util/src/telemetry/mod.rs | 28 +++++++------------ 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/crates/arc-util/src/telemetry/anonymous_id.rs b/crates/arc-util/src/telemetry/anonymous_id.rs index 86a61af01..d1026af50 100644 --- a/crates/arc-util/src/telemetry/anonymous_id.rs +++ b/crates/arc-util/src/telemetry/anonymous_id.rs @@ -1,6 +1,6 @@ use anyhow::{Context, Result}; use std::fs; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use uuid::Uuid; fn dot_id_path() -> Result { @@ -8,15 +8,18 @@ fn dot_id_path() -> Result { Ok(home.join(".arc").join(".id")) } +fn read_existing_id(path: &Path) -> Option { + let contents = fs::read_to_string(path).ok()?; + let id = contents.trim().to_string(); + (!id.is_empty()).then_some(id) +} + /// Server: UUID persisted at ~/.arc/.id pub fn load_or_create_server_id() -> Result { let path = dot_id_path()?; - if let Ok(contents) = fs::read_to_string(&path) { - let id = contents.trim().to_string(); - if !id.is_empty() { - return Ok(id); - } + if let Some(id) = read_existing_id(&path) { + return Ok(id); } let id = Uuid::new_v4().to_string(); @@ -34,13 +37,8 @@ pub fn load_or_create_server_id() -> Result { /// CLI: prefer existing ~/.arc/.id, else MD5 of MAC address pub fn compute_cli_id() -> Result { - let path = dot_id_path()?; - - if let Ok(contents) = fs::read_to_string(&path) { - let id = contents.trim().to_string(); - if !id.is_empty() { - return Ok(id); - } + if let Some(id) = read_existing_id(&dot_id_path()?) { + return Ok(id); } let mac = mac_address::get_mac_address() diff --git a/crates/arc-util/src/telemetry/mod.rs b/crates/arc-util/src/telemetry/mod.rs index 79da2e8c2..ab0677f57 100644 --- a/crates/arc-util/src/telemetry/mod.rs +++ b/crates/arc-util/src/telemetry/mod.rs @@ -24,28 +24,20 @@ pub struct Telemetry { } impl Telemetry { - pub fn for_server() -> Result { - let level = telemetry_level(); - let anonymous_id = anonymous_id::load_or_create_server_id()?; - let context = context::build_context(); - - Ok(Self { - level, + fn new(anonymous_id: String) -> Self { + Self { + level: telemetry_level(), anonymous_id, - context, - }) + context: context::build_context(), + } + } + + pub fn for_server() -> Result { + Ok(Self::new(anonymous_id::load_or_create_server_id()?)) } pub fn for_cli() -> Result { - let level = telemetry_level(); - let anonymous_id = anonymous_id::compute_cli_id()?; - let context = context::build_context(); - - Ok(Self { - level, - anonymous_id, - context, - }) + Ok(Self::new(anonymous_id::compute_cli_id()?)) } pub fn level(&self) -> &TelemetryLevel {