// Copyright 2016 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. //! Core Foundation errors. pub use core_foundation_sys::error::*; use std::error::Error; use std::fmt; use base::{CFIndex, TCFType}; use string::CFString; declare_TCFType!{ /// An error value. CFError, CFErrorRef } impl_TCFType!(CFError, CFErrorRef, CFErrorGetTypeID); impl fmt::Debug for CFError { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { fmt.debug_struct("CFError") .field("domain", &self.domain()) .field("code", &self.code()) .field("description", &self.description()) .finish() } } impl fmt::Display for CFError { fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { write!(fmt, "{}", self.description()) } } impl Error for CFError { fn description(&self) -> &str { "a Core Foundation error" } } impl CFError { /// Returns a string identifying the domain with which this error is /// associated. pub fn domain(&self) -> CFString { unsafe { let s = CFErrorGetDomain(self.0); CFString::wrap_under_get_rule(s) } } /// Returns the code identifying this type of error. pub fn code(&self) -> CFIndex { unsafe { CFErrorGetCode(self.0) } } /// Returns a human-presentable description of the error. pub fn description(&self) -> CFString { unsafe { let s = CFErrorCopyDescription(self.0); CFString::wrap_under_create_rule(s) } } }