// Created on savesnippets.com · https://savesnippets.com/cTUIFi2rira87v fn greet(name: &str) -> String { // take &str, return String format!("Hello, {name}!") // format! always returns String } fn main() { // String literals are &'static str let lit: &str = "hello"; // Build a String (heap-allocated, mutable) let mut owned: String = String::from("hi"); owned.push_str(", world"); // &str ↔ String let from_string: &str = &owned; // String → &str let to_string: String = "abc".to_string(); // &str → String let also_to: String = String::from("abc"); // same thing // Slice into a UTF-8 boundary — bytes, not chars! let s = "héllo"; println!("{}", &s[0..3]); // "hé" (h + é which is 2 bytes) // &s[0..2] would panic — not a char boundary println!("{} {} {} {}", lit, owned, from_string, to_string); println!("{}", greet("Alice")); }