From a8f581fad1e08ae566b10279c5ee60cb77b3672d Mon Sep 17 00:00:00 2001 From: fort Date: Mon, 9 Jun 2014 23:09:53 -0700 Subject: [PATCH] Show impl for Ref & RefMut --- src/libcore/cell.rs | 17 +++++++++++++++++ src/libcore/fmt/mod.rs | 15 ++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index eef133181e1..7ab2ae307d4 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -385,6 +385,7 @@ impl<'b, T> DerefMut for RefMut<'b, T> { #[cfg(test)] mod test { use super::*; + use mem::drop; #[test] fn smoketest_cell() { @@ -412,6 +413,22 @@ mod test { assert!(format!("{}", x).as_slice().contains(x.get())); } + #[test] + fn ref_and_refmut_have_sensible_show() { + use str::StrSlice; + use realstd::str::Str; + + let refcell = RefCell::new("foo"); + + let refcell_refmut = refcell.borrow_mut(); + assert!(format!("{}", refcell_refmut).as_slice().contains("foo")); + drop(refcell_refmut); + + let refcell_ref = refcell.borrow(); + assert!(format!("{}", refcell_ref).as_slice().contains("foo")); + drop(refcell_ref); + } + #[test] fn double_imm_borrow() { let x = RefCell::new(0); diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs index 37ef325d937..e70fd837861 100644 --- a/src/libcore/fmt/mod.rs +++ b/src/libcore/fmt/mod.rs @@ -13,13 +13,14 @@ #![allow(unused_variable)] use any; -use cell::Cell; +use cell::{Cell, Ref, RefMut}; use char::Char; use collections::Collection; use iter::{Iterator, range}; use kinds::Copy; use mem; use option::{Option, Some, None}; +use ops::Deref; use result::{Ok, Err}; use result; use slice::{Vector, ImmutableVector}; @@ -849,5 +850,17 @@ impl Show for Cell { } } +impl<'b, T: Show> Show for Ref<'b, T> { + fn fmt(&self, f: &mut Formatter) -> Result { + (**self).fmt(f) + } +} + +impl<'b, T: Show> Show for RefMut<'b, T> { + fn fmt(&self, f: &mut Formatter) -> Result { + (*(self.deref())).fmt(f) + } +} + // If you expected tests to be here, look instead at the run-pass/ifmt.rs test, // it's a lot easier than creating all of the rt::Piece structures here.