1 // Copyright 2024 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::Error as IOError; 6 7 use remain::sorted; 8 use thiserror::Error; 9 10 use crate::utils::Error as UtilsError; 11 12 #[sorted] 13 #[derive(Error, Debug)] 14 pub enum Error { 15 #[error("Failed to arm {name} timer: {error:#}")] 16 CannotArmPollTimer { name: String, error: base::Error }, 17 #[error("Failed to clear {name} timer: {error:#}")] 18 CannotClearPollTimer { name: String, error: base::Error }, 19 #[error("Cannot convert the u2f init packet from bytes")] 20 CannotConvertInitPacketFromBytes, 21 #[error("Cannot create the poll timer")] 22 CannotCreatePollTimer(base::Error), 23 #[error("Pending fido transfer reference has been lost.")] 24 FidoTransferLost, 25 #[error("The fido device is in an inconsistent state")] 26 InconsistentFidoDeviceState, 27 #[error("Invalid data buffer size")] 28 InvalidDataBufferSize, 29 #[error("The given hidraw device is not a security key")] 30 InvalidHidrawDevice, 31 #[error("The u2f init packet is invalid")] 32 InvalidInitPacket, 33 #[error("The u2f init packet contains invalid data size for the nonce")] 34 InvalidNonceSize, 35 #[error("Pending packet queue is full and cannot process more host packets")] 36 PendingInQueueFull, 37 #[error("Failed to read packet from hidraw device")] 38 ReadHidrawDevice(IOError), 39 #[error("Cannot start fido device queue")] 40 StartAsyncFidoQueue(UtilsError), 41 #[error("Unsupported TransferBuffer type")] 42 UnsupportedTransferBufferType, 43 #[error("Failed to wait context on poll thread")] 44 WaitContextFailed(anyhow::Error), 45 #[error("Failed to write to hidraw device")] 46 WriteHidrawDevice(IOError), 47 } 48 49 pub type Result<T> = std::result::Result<T, Error>; 50