pub mod model;
pub mod report;
mod transport;
pub use model::UsageData;
pub use transport::{cache_age_secs, fetch, hub_hostname, is_configured};
#[derive(Debug, thiserror::Error)]
pub enum FetchError {
#[error("negative cache active — hub confirmed down within cooldown window")]
NegativeCacheActive,
#[error("HTTP fetch failed: {0}")]
Http(#[from] reqwest::Error),
#[cfg(unix)]
#[error("SSH fallback failed: {0}")]
Ssh(String),
#[error("usage command failed: {0}")]
Command(String),
#[error("JSON parse error: {0}")]
Json(#[from] serde_json::Error),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("hub returned empty payload")]
EmptyPayload,
}