summaryrefslogtreecommitdiffstats
path: root/vendor/core-foundation/src/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/core-foundation/src/error.rs')
-rw-r--r--vendor/core-foundation/src/error.rs71
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/core-foundation/src/error.rs b/vendor/core-foundation/src/error.rs
new file mode 100644
index 000000000..f100171bc
--- /dev/null
+++ b/vendor/core-foundation/src/error.rs
@@ -0,0 +1,71 @@
+// 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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)
+ }
+ }
+}