use serde::{Deserialize, Serialize};
use schemars::JsonSchema;
#[derive(Debug, Deserialize, JsonSchema)]
pub struct Input;
#[derive(Debug, Serialize, JsonSchema)]
pub struct Output {
pub os: String,
pub os_version: String,
pub architecture: String,
pub hostname: String,
pub cwd: String,
pub user: String,
pub rust_version: String,
}
pub struct SysutilInfo;
impl SysutilInfo {
pub const MODULE_ID: &'static str = "sysutil.info";
pub const DESCRIPTION: &'static str =
"Get basic system information (OS, architecture, hostname)";
pub fn execute(_input: Input) -> Output {
Output {
os: std::env::consts::OS.to_string(),
os_version: "unknown".to_string(), architecture: std::env::consts::ARCH.to_string(),
hostname: hostname(),
cwd: std::env::current_dir()
.map(|p| p.display().to_string())
.unwrap_or_default(),
user: std::env::var("USER")
.or_else(|_| std::env::var("USERNAME"))
.unwrap_or_else(|_| "unknown".to_string()),
rust_version: env!("CARGO_PKG_RUST_VERSION", "unknown").to_string(),
}
}
}
fn hostname() -> String {
std::env::var("HOSTNAME")
.or_else(|_| std::env::var("COMPUTERNAME"))
.unwrap_or_else(|_| "unknown".to_string())
}
fn main() {
let output = SysutilInfo::execute(Input);
println!("{}", serde_json::to_string_pretty(&output).unwrap());
}