Replace manual plist creation with macro in diagnostics relay

This commit is contained in:
Jackson Coxson
2025-08-23 09:45:41 -06:00
parent 104b5c1543
commit 4d5e646a6b

View File

@@ -39,27 +39,17 @@ impl DiagnosticsRelayClient {
/// A plist of the tree on success /// A plist of the tree on success
pub async fn ioregistry( pub async fn ioregistry(
&mut self, &mut self,
current_plane: Option<impl Into<String>>, current_plane: Option<&str>,
entry_name: Option<impl Into<String>>, entry_name: Option<&str>,
entry_class: Option<impl Into<String>>, entry_class: Option<&str>,
) -> Result<Option<plist::Dictionary>, IdeviceError> { ) -> Result<Option<plist::Dictionary>, IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
if let Some(plane) = current_plane { "Request": "IORegistry",
let plane = plane.into(); "CurrentPlane":? current_plane,
req.insert("CurrentPlane".into(), plane.into()); "EntryName":? entry_name,
} "EntryClass":? entry_class,
if let Some(name) = entry_name { });
let name = name.into(); self.idevice.send_plist(req).await?;
req.insert("EntryName".into(), name.into());
}
if let Some(class) = entry_class {
let class = class.into();
req.insert("EntryClass".into(), class.into());
}
req.insert("Request".into(), "IORegistry".into());
self.idevice
.send_plist(plist::Value::Dictionary(req))
.await?;
let mut res = self.idevice.read_plist().await?; let mut res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -89,17 +79,11 @@ impl DiagnosticsRelayClient {
&mut self, &mut self,
keys: Option<Vec<String>>, keys: Option<Vec<String>>,
) -> Result<Option<plist::Dictionary>, IdeviceError> { ) -> Result<Option<plist::Dictionary>, IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "MobileGestalt".into()); "Request": "MobileGestalt",
"MobileGestaltKeys":? keys,
if let Some(keys) = keys { });
let keys_array: Vec<plist::Value> = keys.into_iter().map(|k| k.into()).collect(); self.idevice.send_plist(req).await?;
req.insert("MobileGestaltKeys".into(), plist::Value::Array(keys_array));
}
self.idevice
.send_plist(plist::Value::Dictionary(req))
.await?;
let mut res = self.idevice.read_plist().await?; let mut res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -119,12 +103,10 @@ impl DiagnosticsRelayClient {
/// # Returns /// # Returns
/// A dictionary containing gas gauge (battery) information /// A dictionary containing gas gauge (battery) information
pub async fn gasguage(&mut self) -> Result<Option<plist::Dictionary>, IdeviceError> { pub async fn gasguage(&mut self) -> Result<Option<plist::Dictionary>, IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "GasGauge".into()); "Request": "GasGauge"
});
self.idevice self.idevice.send_plist(req).await?;
.send_plist(plist::Value::Dictionary(req))
.await?;
let mut res = self.idevice.read_plist().await?; let mut res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -144,12 +126,11 @@ impl DiagnosticsRelayClient {
/// # Returns /// # Returns
/// A dictionary containing NAND flash information /// A dictionary containing NAND flash information
pub async fn nand(&mut self) -> Result<Option<plist::Dictionary>, IdeviceError> { pub async fn nand(&mut self) -> Result<Option<plist::Dictionary>, IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "NAND".into()); "Request": "NAND"
});
self.idevice self.idevice.send_plist(req).await?;
.send_plist(plist::Value::Dictionary(req))
.await?;
let mut res = self.idevice.read_plist().await?; let mut res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -169,12 +150,11 @@ impl DiagnosticsRelayClient {
/// # Returns /// # Returns
/// A dictionary containing all diagnostics information /// A dictionary containing all diagnostics information
pub async fn all(&mut self) -> Result<Option<plist::Dictionary>, IdeviceError> { pub async fn all(&mut self) -> Result<Option<plist::Dictionary>, IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "All".into()); "Request": "All"
});
self.idevice self.idevice.send_plist(req).await?;
.send_plist(plist::Value::Dictionary(req))
.await?;
let mut res = self.idevice.read_plist().await?; let mut res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -194,12 +174,11 @@ impl DiagnosticsRelayClient {
/// # Returns /// # Returns
/// Result indicating success or failure /// Result indicating success or failure
pub async fn restart(&mut self) -> Result<(), IdeviceError> { pub async fn restart(&mut self) -> Result<(), IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "Restart".into()); "Request": "Restart",
});
self.idevice self.idevice.send_plist(req).await?;
.send_plist(plist::Value::Dictionary(req))
.await?;
let res = self.idevice.read_plist().await?; let res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -213,12 +192,11 @@ impl DiagnosticsRelayClient {
/// # Returns /// # Returns
/// Result indicating success or failure /// Result indicating success or failure
pub async fn shutdown(&mut self) -> Result<(), IdeviceError> { pub async fn shutdown(&mut self) -> Result<(), IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "Shutdown".into()); "Request": "Shutdown"
});
self.idevice self.idevice.send_plist(req).await?;
.send_plist(plist::Value::Dictionary(req))
.await?;
let res = self.idevice.read_plist().await?; let res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -232,12 +210,11 @@ impl DiagnosticsRelayClient {
/// # Returns /// # Returns
/// Result indicating success or failure /// Result indicating success or failure
pub async fn sleep(&mut self) -> Result<(), IdeviceError> { pub async fn sleep(&mut self) -> Result<(), IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "Sleep".into()); "Request": "Sleep"
});
self.idevice self.idevice.send_plist(req).await?;
.send_plist(plist::Value::Dictionary(req))
.await?;
let res = self.idevice.read_plist().await?; let res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -248,12 +225,11 @@ impl DiagnosticsRelayClient {
/// Requests WiFi diagnostics from the device /// Requests WiFi diagnostics from the device
pub async fn wifi(&mut self) -> Result<Option<plist::Dictionary>, IdeviceError> { pub async fn wifi(&mut self) -> Result<Option<plist::Dictionary>, IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "WiFi".into()); "Request": "WiFi"
});
self.idevice self.idevice.send_plist(req).await?;
.send_plist(plist::Value::Dictionary(req))
.await?;
let mut res = self.idevice.read_plist().await?; let mut res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
@@ -270,11 +246,11 @@ impl DiagnosticsRelayClient {
/// Sends Goodbye request signaling end of communication /// Sends Goodbye request signaling end of communication
pub async fn goodbye(&mut self) -> Result<(), IdeviceError> { pub async fn goodbye(&mut self) -> Result<(), IdeviceError> {
let mut req = plist::Dictionary::new(); let req = crate::plist!({
req.insert("Request".into(), "Goodbye".into()); "Request": "Goodbye"
self.idevice });
.send_plist(plist::Value::Dictionary(req))
.await?; self.idevice.send_plist(req).await?;
let res = self.idevice.read_plist().await?; let res = self.idevice.read_plist().await?;
match res.get("Status").and_then(|x| x.as_string()) { match res.get("Status").and_then(|x| x.as_string()) {
Some("Success") => Ok(()), Some("Success") => Ok(()),