Converting strings

Often when writing a function that takes a piece of text you’ll want to support both String and &str to be more convenient to the caller. This is best achieved by using &str or Into<String>.

String can be converted to &str like this:

let text = String::new();
print(&text);

(Actually it's converted to &String as adding a & just makes it a reference but &String implements AsRef<str> allowing it to be automatically converted)

The Into trait tells the compiler to allow any parameter that be coerced as that type to be passed in. &str already has the Into<String> trait but it can also be implemented for any struct. Into<X> for Y is automatically implemented for any type that implements From<Y> for X which is actually how it’s implemented for Strings and is the recommended approach.

fn print(value: &str) { 
	println!("{}", value;
}

fn print<S: Into<String>>(value: S) { 
	println!("{}", value.into());
}