Skip to main content

DeviceControlError

Enum DeviceControlError 

Source
#[non_exhaustive]
pub enum DeviceControlError { Spawn(Error), AppNotInstalled { bundle_id: String, udid: String, }, NonZeroExit { subcommand: String, argv: Vec<String>, code: i32, stderr: String, wall_ms: u64, }, Malformed { subcommand: String, detail: String, }, Timeout { subcommand: String, ms: u64, }, CaptureBackpressure { retry_after: Duration, }, }
Expand description

Failure variants for a device-control invocation.

DeviceControl is one trait across iOS and Android, and this is its error type — AndroidDeviceControl raises it as much as the simctl path does. The messages name the command that actually ran rather than assuming simctl, so an Android failure does not send the reader to the wrong toolchain by claiming to come from xcrun simctl.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Spawn(Error)

Failed to spawn the device-control process (PATH lookup / fork failure).

§

AppNotInstalled

The bundle is not installed on the device. simctl get_app_container exiting non-zero is the canonical signal — surfaced as its own variant because “run a flow whose appId names an app you have not installed yet” is the single most common first-run mistake, and it used to read as a bare subprocess error.

Fields

§bundle_id: String

The bundle the caller asked about.

§udid: String

The device it is missing from.

§

NonZeroExit

The device-control command exited non-zero.

Carries the full argv and wall_ms so the Display impl surfaces every argument needed to reproduce the failure or file a precise upstream bug — the subcommand name alone (e.g. "spawn") does not say which binary or paths were touched.

Fields

§subcommand: String

Subcommand name (e.g. "boot", "launch").

§argv: Vec<String>

The full command as invoked, binary first — ["xcrun", "simctl", "boot", …] from simctl, ["adb", …] from the Android side.

The binary belongs here rather than in the Display format string: this error type serves both platforms, and hard-coding xcrun simctl made every Android failure name a tool that never ran, sending the reader to the wrong toolchain.

Since smix 1.0.7.

§code: i32

Exit code from xcrun simctl.

§stderr: String

Captured stderr (truncated for log-friendliness).

§wall_ms: u64

Wall-clock milliseconds the invocation ran before failing.

Since smix 1.0.7.

§

Malformed

xcrun simctl <sub> exited 0 but stdout didn’t match the expected shape.

Fields

§subcommand: String

Subcommand name.

§detail: String

Parser-side detail.

§

Timeout

xcrun simctl <sub> did not complete within the deadline.

Fields

§subcommand: String

Subcommand name.

§ms: u64

Deadline that was exceeded (milliseconds).

§

CaptureBackpressure

The screenshot pacer’s circuit is open — a recent screenshot wall time exceeded the circuit threshold, or a screenshot failed. Callers should back off for retry_after and try again. See screenshot_pacer::ScreenshotPacer.

Since smix 1.0.4.

Fields

§retry_after: Duration

Suggested minimum delay before the next attempt.

Implementations§

Source§

impl DeviceControlError

Source

pub fn non_zero_exit( subcommand: impl Into<String>, code: i32, stderr: impl Into<String>, ) -> DeviceControlError

Synthetic NonZeroExit for callers translating a foreign subprocess error into DeviceControlError (e.g. AndroidDeviceControl adapting adb failures). Fills argv = [subcommand] + wall_ms = 0; when the caller has a real argv, prefer the struct literal.

Trait Implementations§

Source§

impl Debug for DeviceControlError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for DeviceControlError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Error for DeviceControlError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<Error> for DeviceControlError

Source§

fn from(source: Error) -> DeviceControlError

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more