use moonbase::fingerprint_spec::DeviceIdSource;
use moonbase::{DeviceIdResolver, Error, MoonbaseDeviceIdResolver};
use serde_json::json;
fn main() {
let resolver = MoonbaseDeviceIdResolver::new();
let mut out = json!({ "deviceName": resolver.device_name() });
match resolver.describe_device() {
Ok(Some(described)) => {
out["deviceId"] = json!(described.device_id);
out["version"] = json!(described.version);
out["platform"] = json!(described.platform);
out["source"] = json!(match described.source {
DeviceIdSource::DeviceName => "deviceName",
DeviceIdSource::Scoped => "scoped",
DeviceIdSource::Identity => "identity",
});
out["paramNames"] = json!(described.param_names);
}
Ok(None) => unreachable!("the default resolver always describes itself"),
Err(Error::InsufficientDeviceIdentity { platform, reason }) => {
out["error"] = json!("DeviceIdentityUnavailable");
out["message"] = json!(format!("Could not identify this device (platform: {platform}): {reason}"));
out["platform"] = json!(platform);
}
Err(error) => {
out["error"] = json!(format!("{:?}", error.error_type()));
out["message"] = json!(error.to_string());
}
}
println!("{}", serde_json::to_string_pretty(&out).expect("JSON values always serialize"));
}