]> git.lizzy.rs Git - rust.git/commitdiff
Implement Show for `Arc<T>`
authorAdolfo Ochagavía <aochagavia92@gmail.com>
Sun, 26 Oct 2014 11:58:04 +0000 (12:58 +0100)
committerAdolfo Ochagavía <aochagavia92@gmail.com>
Sun, 26 Oct 2014 14:30:40 +0000 (15:30 +0100)
Fixes https://github.com/rust-lang/rust/issues/18299

src/liballoc/arc.rs

index c447cb46c532a81c07b76849d4386f01b70d4620..0e62fbb01441dcc1eee788fbdcc51a7a07a0d431 100644 (file)
@@ -15,6 +15,7 @@
 
 use core::atomic;
 use core::clone::Clone;
+use core::fmt::{mod, Show};
 use core::kinds::{Sync, Send};
 use core::mem::{min_align_of, size_of, drop};
 use core::mem;
@@ -147,6 +148,12 @@ fn deref(&self) -> &T {
     }
 }
 
+impl<T: Send + Sync + Show> Show for Arc<T> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        (**self).fmt(f)
+    }
+}
+
 impl<T: Send + Sync + Clone> Arc<T> {
     /// Acquires a mutable pointer to the inner contents by guaranteeing that
     /// the reference count is one (no sharing is possible).
@@ -280,6 +287,7 @@ mod tests {
     use std::mem::drop;
     use std::ops::Drop;
     use std::option::{Option, Some, None};
+    use std::str::Str;
     use std::sync::atomic;
     use std::task;
     use std::vec::Vec;
@@ -426,4 +434,10 @@ fn drop_arc_weak() {
         assert!(canary.load(atomic::Acquire) == 1);
         drop(arc_weak);
     }
+
+    #[test]
+    fn show_arc() {
+        let a = Arc::new(5u32);
+        assert!(format!("{}", a).as_slice() == "5")
+    }
 }