Skip to content

Commit

Permalink
Move ToString to collections::string
Browse files Browse the repository at this point in the history
This also impls `FormatWriter` for `Vec<u8>`
  • Loading branch information
brendanzab committed Nov 16, 2014
1 parent 59abf75 commit d82a7ea
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 72 deletions.
38 changes: 37 additions & 1 deletion src/libcollections/string.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<T: fmt::Show> ToString for T {
fn to_string(&self) -> String {
let mut buf = Vec::<u8>::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 {
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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<int> = 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(|| {
Expand Down
7 changes: 7 additions & 0 deletions src/libcollections/vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1653,6 +1653,13 @@ impl<T> Vec<T> {
}
}

impl<'a> fmt::FormatWriter for Vec<u8> {
fn write(&mut self, buf: &[u8]) -> fmt::Result {
self.push_all(buf);
Ok(())
}
}

#[cfg(test)]
mod tests {
extern crate test;
Expand Down
1 change: 0 additions & 1 deletion src/libstd/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,6 @@ pub mod time;

pub mod error;
pub mod num;
pub mod to_string;

/* Common data structures */

Expand Down
2 changes: 1 addition & 1 deletion src/libstd/num/strconv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
3 changes: 1 addition & 2 deletions src/libstd/os.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
3 changes: 1 addition & 2 deletions src/libstd/prelude.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 1 addition & 2 deletions src/libstd/task.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion src/libstd/time/duration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
60 changes: 0 additions & 60 deletions src/libstd/to_string.rs

This file was deleted.

2 changes: 1 addition & 1 deletion src/test/run-pass/class-cast-to-trait-cross-crate-2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<ToString>, expected: String) {
Expand Down
2 changes: 1 addition & 1 deletion src/test/run-pass/send_str_treemap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit d82a7ea

Please sign in to comment.