Skip to content

Commit bf6abf8

Browse files
committed
Implement Show for 1-12 element tuples
1 parent 5d4fd50 commit bf6abf8

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/libstd/tuple.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
use clone::Clone;
1616
#[cfg(not(test))] use cmp::*;
1717
#[cfg(not(test))] use default::Default;
18+
use fmt;
19+
use result::{Ok, Err};
1820

1921
/// Method extensions to pairs where both types satisfy the `Clone` bound
2022
pub trait CloneableTuple<T, U> {
@@ -176,6 +178,12 @@ macro_rules! tuple_impls {
176178
($({ let x: $T = Default::default(); x},)+)
177179
}
178180
}
181+
182+
impl<$($T: fmt::Show),+> fmt::Show for ($($T,)+) {
183+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
184+
write_tuple!(f.buf, $(self.$get_ref_fn()),+)
185+
}
186+
}
179187
)+
180188
}
181189
}
@@ -202,6 +210,17 @@ macro_rules! lexical_cmp {
202210
($a:expr, $b:expr) => { ($a).cmp($b) };
203211
}
204212

213+
macro_rules! write_tuple {
214+
($buf:expr, $x:expr) => (
215+
write!($buf, "({},)", *$x)
216+
);
217+
($buf:expr, $hd:expr, $($tl:expr),+) => ({
218+
if_ok!(write!($buf, "("));
219+
if_ok!(write!($buf, "{}", *$hd));
220+
$(if_ok!(write!($buf, ", {}", *$tl));)+
221+
write!($buf, ")")
222+
});
223+
}
205224

206225
tuple_impls! {
207226
(Tuple1, ImmutableTuple1) {
@@ -422,4 +441,11 @@ mod tests {
422441
assert_eq!(small.cmp(&big), Less);
423442
assert_eq!(big.cmp(&small), Greater);
424443
}
444+
445+
#[test]
446+
fn test_show() {
447+
assert_eq!(format!("{}", (1,)), ~"(1,)");
448+
assert_eq!(format!("{}", (1, true)), ~"(1, true)");
449+
assert_eq!(format!("{}", (1, ~"hi", true)), ~"(1, hi, true)");
450+
}
425451
}

0 commit comments

Comments
 (0)