From b4bd00fdad094b16c785b8ead9f92d68264f5fb4 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 12 Feb 2019 17:51:26 -0800 Subject: error: Print errors using Display impl I have been running into Debug-printed error messages too often and needing to look up in the source code each level of nested errors to find out from the comment on the error variant what the short name of the variant means in human terms. Worse, many errors (like the one shown below) already had error strings written but were being printed from the calling code in the less helpful Debug representation anyway. Before: [ERROR:src/main.rs:705] The architecture failed to build the vm: NoVarEmpty After: [ERROR:src/main.rs:705] The architecture failed to build the vm: /var/empty doesn't exist, can't jail devices. TEST=cargo check --all-features TEST=FEATURES=test emerge-amd64-generic crosvm Change-Id: I77122c7d6861b2d610de2fff718896918ab21e10 Reviewed-on: https://chromium-review.googlesource.com/1469225 Commit-Ready: David Tolnay Tested-by: David Tolnay Tested-by: kokoro Reviewed-by: Daniel Verkamp --- gpu_display/src/lib.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'gpu_display') diff --git a/gpu_display/src/lib.rs b/gpu_display/src/lib.rs index 6b93bbc..01cef5e 100644 --- a/gpu_display/src/lib.rs +++ b/gpu_display/src/lib.rs @@ -12,6 +12,7 @@ mod dwl; use std::cell::Cell; use std::collections::HashMap; use std::ffi::{CStr, CString}; +use std::fmt::{self, Display}; use std::os::unix::io::{AsRawFd, RawFd}; use std::path::Path; use std::ptr::null_mut; @@ -45,6 +46,23 @@ pub enum GpuDisplayError { InvalidPath, } +impl Display for GpuDisplayError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + use self::GpuDisplayError::*; + + match self { + Allocate => write!(f, "internal allocation failed"), + Connect => write!(f, "failed to connect to compositor"), + CreateShm(e) => write!(f, "failed to create shared memory: {}", e), + SetSize(e) => write!(f, "failed to set size of shared memory: {}", e), + CreateSurface => write!(f, "failed to crate surface on the compositor"), + FailedImport => write!(f, "failed to import a buffer to the compositor"), + InvalidSurfaceId => write!(f, "invalid surface ID"), + InvalidPath => write!(f, "invalid path"), + } + } +} + struct DwlContext(*mut dwl_context); impl Drop for DwlContext { fn drop(&mut self) { -- cgit 1.4.1