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