From 12d4d12fef4f9024ffcc8eb5fef11f1a21074cd7 Mon Sep 17 00:00:00 2001 From: "Felix S. Klock II" Date: Tue, 13 Jun 2017 21:57:49 +0200 Subject: implement Error trait for error structs added in allocator API. --- src/liballoc/allocator.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/liballoc') diff --git a/src/liballoc/allocator.rs b/src/liballoc/allocator.rs index c308d99a72c..752acbd0b45 100644 --- a/src/liballoc/allocator.rs +++ b/src/liballoc/allocator.rs @@ -16,6 +16,7 @@ issue = "27700")] use core::cmp; +use core::fmt; use core::mem; use core::usize; use core::ptr::{self, Unique}; @@ -335,6 +336,19 @@ impl AllocErr { pub fn is_request_unsupported(&self) -> bool { if let AllocErr::Unsupported { .. } = *self { true } else { false } } + pub fn description(&self) -> &str { + match *self { + AllocErr::Exhausted { .. } => "allocator memory exhausted", + AllocErr::Unsupported { .. } => "unsupported allocator request", + } + } +} + +// (we need this for downstream impl of trait Error) +impl fmt::Display for AllocErr { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.description()) + } } /// The `CannotReallocInPlace` error is used when `grow_in_place` or @@ -343,6 +357,20 @@ impl AllocErr { #[derive(Clone, PartialEq, Eq, Debug)] pub struct CannotReallocInPlace; +impl CannotReallocInPlace { + pub fn description(&self) -> &str { + "cannot reallocate allocator's memory in place" + } +} + +// (we need this for downstream impl of trait Error) +impl fmt::Display for CannotReallocInPlace { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.description()) + } +} + +/// An implementation of `Allocator` can allocate, reallocate, and /// An implementation of `Alloc` can allocate, reallocate, and /// deallocate arbitrary blocks of data described via `Layout`. /// -- cgit 1.4.1-3-g733a5