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