xref: /aosp_15_r20/external/crosvm/usb_util/src/error.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker use std::io;
6*bb4ee6a4SAndroid Build Coastguard Worker use std::num;
7*bb4ee6a4SAndroid Build Coastguard Worker 
8*bb4ee6a4SAndroid Build Coastguard Worker use base::IoctlNr;
9*bb4ee6a4SAndroid Build Coastguard Worker use remain::sorted;
10*bb4ee6a4SAndroid Build Coastguard Worker use thiserror::Error;
11*bb4ee6a4SAndroid Build Coastguard Worker 
12*bb4ee6a4SAndroid Build Coastguard Worker #[sorted]
13*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Error, Debug)]
14*bb4ee6a4SAndroid Build Coastguard Worker pub enum Error {
15*bb4ee6a4SAndroid Build Coastguard Worker     #[error("parsing descriptors failed")]
16*bb4ee6a4SAndroid Build Coastguard Worker     DescriptorParse,
17*bb4ee6a4SAndroid Build Coastguard Worker     #[error("reading descriptors from device failed: {0}")]
18*bb4ee6a4SAndroid Build Coastguard Worker     DescriptorRead(io::Error),
19*bb4ee6a4SAndroid Build Coastguard Worker     #[error("File::try_clone() failed: {0}")]
20*bb4ee6a4SAndroid Build Coastguard Worker     FdCloneFailed(io::Error),
21*bb4ee6a4SAndroid Build Coastguard Worker     #[error("getting a dma buffer of size {0:x} failed")]
22*bb4ee6a4SAndroid Build Coastguard Worker     GetDmaBufferFailed(usize),
23*bb4ee6a4SAndroid Build Coastguard Worker     #[error("invalid actual_length in URB: {0}")]
24*bb4ee6a4SAndroid Build Coastguard Worker     InvalidActualLength(num::TryFromIntError),
25*bb4ee6a4SAndroid Build Coastguard Worker     #[error("invalid transfer buffer")]
26*bb4ee6a4SAndroid Build Coastguard Worker     InvalidBuffer,
27*bb4ee6a4SAndroid Build Coastguard Worker     #[error("invalid transfer buffer length: {0}")]
28*bb4ee6a4SAndroid Build Coastguard Worker     InvalidBufferLength(num::TryFromIntError),
29*bb4ee6a4SAndroid Build Coastguard Worker     #[error("USB ioctl 0x{0:x} failed: {1}")]
30*bb4ee6a4SAndroid Build Coastguard Worker     IoctlFailed(IoctlNr, base::Error),
31*bb4ee6a4SAndroid Build Coastguard Worker     #[error("USB mmap failed: {0}")]
32*bb4ee6a4SAndroid Build Coastguard Worker     MmapFailed(base::MmapError),
33*bb4ee6a4SAndroid Build Coastguard Worker     #[error("Device has been removed")]
34*bb4ee6a4SAndroid Build Coastguard Worker     NoDevice,
35*bb4ee6a4SAndroid Build Coastguard Worker     #[error("Requested descriptor not found")]
36*bb4ee6a4SAndroid Build Coastguard Worker     NoSuchDescriptor,
37*bb4ee6a4SAndroid Build Coastguard Worker     #[error("Rc::get_mut failed")]
38*bb4ee6a4SAndroid Build Coastguard Worker     RcGetMutFailed,
39*bb4ee6a4SAndroid Build Coastguard Worker     #[error("Rc::try_unwrap failed")]
40*bb4ee6a4SAndroid Build Coastguard Worker     RcUnwrapFailed,
41*bb4ee6a4SAndroid Build Coastguard Worker     #[error("releasing the dma buffer failed")]
42*bb4ee6a4SAndroid Build Coastguard Worker     ReleaseDmaBufferFailed,
43*bb4ee6a4SAndroid Build Coastguard Worker     #[error("attempted to cancel already-completed transfer")]
44*bb4ee6a4SAndroid Build Coastguard Worker     TransferAlreadyCompleted,
45*bb4ee6a4SAndroid Build Coastguard Worker }
46*bb4ee6a4SAndroid Build Coastguard Worker 
47*bb4ee6a4SAndroid Build Coastguard Worker pub type Result<T> = std::result::Result<T, Error>;
48