use serde_json::json;
const CI_ENVIRONMENT_VARIABLES: &[&str] =
&["BUILD_BUILDID", "BUILD_ID", "CI", "PIP_IS_CI"];
fn looks_like_ci() -> Option<bool> {
if CI_ENVIRONMENT_VARIABLES
.iter()
.any(|name| std::env::var_os(name).is_some())
{
Some(true)
} else {
None
}
}
pub fn user_agent() -> String {
let installer = env!("CARGO_PKG_NAME");
let version = env!("CARGO_PKG_VERSION");
let data = json!({
"installer": {
"name": &installer,
"version": &version,
},
"ci": looks_like_ci(),
"cpu": std::env::consts::ARCH,
"user_data": std::env::var("PIP_USER_AGENT_USER_DATA").ok(),
});
format!(
"{}/{} {}",
installer,
version,
serde_json::to_string(&data).unwrap(),
)
}