diff --git a/src/libcollections/string.rs b/src/libcollections/string.rs index b5ed7e6a077..3c75198a368 100644 --- a/src/libcollections/string.rs +++ b/src/libcollections/string.rs @@ -808,6 +808,20 @@ pub trait IntoString { fn into_string(self) -> String; } +/// A generic trait for converting a value to a string +pub trait ToString { + /// Converts the value of `self` to an owned string + fn to_string(&self) -> String; +} + +impl ToString for T { + fn to_string(&self) -> String { + let mut buf = Vec::::new(); + let _ = format_args!(|args| fmt::write(&mut buf, args), "{}", self); + String::from_utf8(buf).unwrap() + } +} + /// Unsafe operations #[unstable = "waiting on raw module conventions"] pub mod raw { @@ -873,7 +887,7 @@ mod tests { use str; use str::{Str, StrPrelude, Owned}; - use super::{as_string, String}; + use super::{as_string, String, ToString}; use vec::Vec; use slice::CloneSliceAllocPrelude; @@ -1177,6 +1191,28 @@ mod tests { assert_eq!("oob", s[1..4]); } + #[test] + fn test_simple_types() { + assert_eq!(1i.to_string(), "1".to_string()); + assert_eq!((-1i).to_string(), "-1".to_string()); + assert_eq!(200u.to_string(), "200".to_string()); + assert_eq!(2u8.to_string(), "2".to_string()); + assert_eq!(true.to_string(), "true".to_string()); + assert_eq!(false.to_string(), "false".to_string()); + assert_eq!(().to_string(), "()".to_string()); + assert_eq!(("hi".to_string()).to_string(), "hi".to_string()); + } + + #[test] + fn test_vectors() { + let x: Vec = vec![]; + assert_eq!(x.to_string(), "[]".to_string()); + assert_eq!((vec![1i]).to_string(), "[1]".to_string()); + assert_eq!((vec![1i, 2, 3]).to_string(), "[1, 2, 3]".to_string()); + assert!((vec![vec![], vec![1i], vec![1i, 1]]).to_string() == + "[[], [1], [1, 1]]".to_string()); + } + #[bench] fn bench_with_capacity(b: &mut Bencher) { b.iter(|| { diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 2b68de932d2..b94c74f6d19 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -1653,6 +1653,13 @@ impl Vec { } } +impl<'a> fmt::FormatWriter for Vec { + fn write(&mut self, buf: &[u8]) -> fmt::Result { + self.push_all(buf); + Ok(()) + } +} + #[cfg(test)] mod tests { extern crate test; diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 4e063223329..612613134d4 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -220,7 +220,6 @@ pub mod time; pub mod error; pub mod num; -pub mod to_string; /* Common data structures */ diff --git a/src/libstd/num/strconv.rs b/src/libstd/num/strconv.rs index 31096c0aa46..d1a89d72621 100644 --- a/src/libstd/num/strconv.rs +++ b/src/libstd/num/strconv.rs @@ -423,7 +423,7 @@ static DIGIT_E_RADIX: uint = ('e' as uint) - ('a' as uint) + 11u; #[cfg(test)] mod tests { - use to_string::ToString; + use string::ToString; #[test] fn test_int_to_str_overflow() { diff --git a/src/libstd/os.rs b/src/libstd/os.rs index 1402d3a3559..23e57a028de 100644 --- a/src/libstd/os.rs +++ b/src/libstd/os.rs @@ -51,8 +51,7 @@ use result::{Err, Ok, Result}; use slice::{AsSlice, SlicePrelude, PartialEqSlicePrelude}; use slice::CloneSliceAllocPrelude; use str::{Str, StrPrelude, StrAllocating}; -use string::String; -use to_string::ToString; +use string::{String, ToString}; use sync::atomic::{AtomicInt, INIT_ATOMIC_INT, SeqCst}; use vec::Vec; diff --git a/src/libstd/prelude.rs b/src/libstd/prelude.rs index a75c51b9f9f..c0197fa53cc 100644 --- a/src/libstd/prelude.rs +++ b/src/libstd/prelude.rs @@ -76,14 +76,13 @@ #[doc(no_inline)] pub use io::{Buffer, Writer, Reader, Seek}; #[doc(no_inline)] pub use str::{Str, StrVector, StrPrelude}; #[doc(no_inline)] pub use str::{IntoMaybeOwned, StrAllocating, UnicodeStrPrelude}; -#[doc(no_inline)] pub use to_string::ToString; #[doc(no_inline)] pub use tuple::{Tuple1, Tuple2, Tuple3, Tuple4}; #[doc(no_inline)] pub use tuple::{Tuple5, Tuple6, Tuple7, Tuple8}; #[doc(no_inline)] pub use tuple::{Tuple9, Tuple10, Tuple11, Tuple12}; #[doc(no_inline)] pub use slice::{SlicePrelude, AsSlice, CloneSlicePrelude}; #[doc(no_inline)] pub use slice::{VectorVector, PartialEqSlicePrelude, OrdSlicePrelude}; #[doc(no_inline)] pub use slice::{CloneSliceAllocPrelude, OrdSliceAllocPrelude, SliceAllocPrelude}; -#[doc(no_inline)] pub use string::{IntoString, String}; +#[doc(no_inline)] pub use string::{IntoString, String, ToString}; #[doc(no_inline)] pub use vec::Vec; // Reexported runtime types diff --git a/src/libstd/task.rs b/src/libstd/task.rs index f0bb8a0f4bc..c7e31dae3d4 100644 --- a/src/libstd/task.rs +++ b/src/libstd/task.rs @@ -105,9 +105,8 @@ use rt::local::Local; use rt::task; use rt::task::Task; use str::{Str, SendStr, IntoMaybeOwned}; -use string::String; +use string::{String, ToString}; use sync::Future; -use to_string::ToString; /// A means of spawning a task pub trait Spawner { diff --git a/src/libstd/time/duration.rs b/src/libstd/time/duration.rs index 5c4e8bda84c..83340c9faac 100644 --- a/src/libstd/time/duration.rs +++ b/src/libstd/time/duration.rs @@ -388,7 +388,7 @@ mod tests { use super::{Duration, MIN, MAX}; use {i32, i64}; use option::{Some, None}; - use to_string::ToString; + use string::ToString; #[test] fn test_duration() { diff --git a/src/libstd/to_string.rs b/src/libstd/to_string.rs deleted file mode 100644 index 327410b320d..00000000000 --- a/src/libstd/to_string.rs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -/*! - -The `ToString` trait for converting to strings - -*/ - -#![experimental] - -use fmt; -use string::String; - -/// A generic trait for converting a value to a string -pub trait ToString { - /// Converts the value of `self` to an owned string - fn to_string(&self) -> String; -} - -impl ToString for T { - fn to_string(&self) -> String { - format!("{}", *self) - } -} - -#[cfg(test)] -mod tests { - use prelude::*; - use super::*; - - #[test] - fn test_simple_types() { - assert_eq!(1i.to_string(), "1".to_string()); - assert_eq!((-1i).to_string(), "-1".to_string()); - assert_eq!(200u.to_string(), "200".to_string()); - assert_eq!(2u8.to_string(), "2".to_string()); - assert_eq!(true.to_string(), "true".to_string()); - assert_eq!(false.to_string(), "false".to_string()); - assert_eq!(().to_string(), "()".to_string()); - assert_eq!(("hi".to_string()).to_string(), "hi".to_string()); - } - - #[test] - fn test_vectors() { - let x: Vec = vec![]; - assert_eq!(x.to_string(), "[]".to_string()); - assert_eq!((vec![1i]).to_string(), "[1]".to_string()); - assert_eq!((vec![1i, 2, 3]).to_string(), "[1, 2, 3]".to_string()); - assert!((vec![vec![], vec![1i], vec![1i, 1]]).to_string() == - "[[], [1], [1, 1]]".to_string()); - } -} diff --git a/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs b/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs index cfee1a81231..a041bbfe8ad 100644 --- a/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs +++ b/src/test/run-pass/class-cast-to-trait-cross-crate-2.rs @@ -11,7 +11,7 @@ // aux-build:cci_class_cast.rs extern crate cci_class_cast; -use std::to_string::ToString; +use std::string::ToString; use cci_class_cast::kitty::cat; fn print_out(thing: Box, expected: String) { diff --git a/src/test/run-pass/send_str_treemap.rs b/src/test/run-pass/send_str_treemap.rs index c52f9458f99..0d881419847 100644 --- a/src/test/run-pass/send_str_treemap.rs +++ b/src/test/run-pass/send_str_treemap.rs @@ -11,7 +11,7 @@ extern crate collections; use std::str::{SendStr, Owned, Slice}; -use std::to_string::ToString; +use std::string::ToString; use self::collections::TreeMap; use std::option::Some;