disk: Switch to ThisError
`ThisError` is now used as the standard across crosvm
Change-Id: I5e888c3af0bf98d6d00487ce48c92c929571bd6d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2947799
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dylan Reid <dgreid@chromium.org>
diff --git a/Cargo.lock b/Cargo.lock
index 0e2abd5..b2b8be9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -347,6 +347,7 @@
"protos",
"remain",
"tempfile",
+ "thiserror",
"vm_memory",
]
diff --git a/disk/Cargo.toml b/disk/Cargo.toml
index 7182daf..8c49b45 100644
--- a/disk/Cargo.toml
+++ b/disk/Cargo.toml
@@ -17,6 +17,7 @@
protobuf = { version = "2.3", optional = true }
remain = "*"
tempfile = "*"
+thiserror = "*"
cros_async = { path = "../cros_async" }
data_model = { path = "../data_model" }
protos = { path = "../protos", optional = true }
diff --git a/disk/src/disk.rs b/disk/src/disk.rs
index bd1945d..792075f 100644
--- a/disk/src/disk.rs
+++ b/disk/src/disk.rs
@@ -3,7 +3,7 @@
// found in the LICENSE file.
use std::cmp::min;
-use std::fmt::{self, Debug, Display};
+use std::fmt::Debug;
use std::fs::File;
use std::io::{self, Read, Seek, SeekFrom, Write};
use std::sync::Arc;
@@ -16,6 +16,7 @@
use cros_async::Executor;
use libc::EINVAL;
use remain::sorted;
+use thiserror::Error as ThisError;
use vm_memory::GuestMemory;
mod qcow;
@@ -30,25 +31,42 @@
use android_sparse::{AndroidSparse, SPARSE_HEADER_MAGIC};
#[sorted]
-#[derive(Debug)]
+#[derive(ThisError, Debug)]
pub enum Error {
+ #[error("failed to create block device: {0}")]
BlockDeviceNew(base::Error),
+ #[error("requested file conversion not supported")]
ConversionNotSupported,
+ #[error("failure in android sparse disk: {0}")]
CreateAndroidSparseDisk(android_sparse::Error),
#[cfg(feature = "composite-disk")]
+ #[error("failure in composite disk: {0}")]
CreateCompositeDisk(composite::Error),
+ #[error("failure creating single file disk: {0}")]
CreateSingleFileDisk(cros_async::AsyncError),
+ #[error("failure with fallocate: {0}")]
Fallocate(cros_async::AsyncError),
+ #[error("failure with fsync: {0}")]
Fsync(cros_async::AsyncError),
+ #[error("failure in qcow: {0}")]
QcowError(qcow::Error),
+ #[error("failed to read data: {0}")]
ReadingData(io::Error),
+ #[error("failed to read header: {0}")]
ReadingHeader(io::Error),
+ #[error("failed to read to memory: {0}")]
ReadToMem(cros_async::AsyncError),
+ #[error("failed to seek file: {0}")]
SeekingFile(io::Error),
+ #[error("failed to set file size: {0}")]
SettingFileSize(io::Error),
+ #[error("unknown disk type")]
UnknownType,
+ #[error("failed to write from memory: {0}")]
WriteFromMem(cros_async::AsyncError),
+ #[error("failed to write from vec: {0}")]
WriteFromVec(cros_async::AsyncError),
+ #[error("failed to write data: {0}")]
WritingData(io::Error),
}
@@ -116,35 +134,6 @@
}
}
-impl Display for Error {
- #[remain::check]
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- use self::Error::*;
-
- #[sorted]
- match self {
- BlockDeviceNew(e) => write!(f, "failed to create block device: {}", e),
- ConversionNotSupported => write!(f, "requested file conversion not supported"),
- CreateAndroidSparseDisk(e) => write!(f, "failure in android sparse disk: {}", e),
- #[cfg(feature = "composite-disk")]
- CreateCompositeDisk(e) => write!(f, "failure in composite disk: {}", e),
- CreateSingleFileDisk(e) => write!(f, "failure creating single file disk: {}", e),
- Fallocate(e) => write!(f, "failure with fallocate: {}", e),
- Fsync(e) => write!(f, "failure with fsync: {}", e),
- QcowError(e) => write!(f, "failure in qcow: {}", e),
- ReadingData(e) => write!(f, "failed to read data: {}", e),
- ReadingHeader(e) => write!(f, "failed to read header: {}", e),
- ReadToMem(e) => write!(f, "failed to read to memory: {}", e),
- SeekingFile(e) => write!(f, "failed to seek file: {}", e),
- SettingFileSize(e) => write!(f, "failed to set file size: {}", e),
- UnknownType => write!(f, "unknown disk type"),
- WriteFromMem(e) => write!(f, "failed to write from memory: {}", e),
- WriteFromVec(e) => write!(f, "failed to write from vec: {}", e),
- WritingData(e) => write!(f, "failed to write data: {}", e),
- }
- }
-}
-
/// The variants of image files on the host that can be used as virtual disks.
#[derive(Debug, PartialEq, Eq)]
pub enum ImageType {