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