1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
//! # Objective: //! //! A collection of convenience functions, macros and traits to shorten repetitive code. //! //! # Status //! //! passively-maintained //! //! # Version //! //! 0.2 //! //! ## Example 1: //! //! Shorten the conversion to a String. //! //! `s!("Hello")` is the same as `String::from("Hello"))` //! //! ## Example 2: //! //! Concatenate two string(s) (slices) and return a **string slice**. //! //! `ss!("Hello", ", world")` is the same as `"Hello, world";` //! //! The same macro works also with an arbitrary combination of String objects and string slices //! //! ```rust //! #[macro_use] extern crate shorten; //! use shorten::*; //! let s1 = s!("Hello"); //! let s2 = s!(", world"); //! assert_eq!(ss!(s1, s2), "Hello, world"); //! ``` //! // Shorten `String::from("hello")` to `s!("hello")` #[macro_export] macro_rules! s { ( $x:expr ) => { String::from($x); }; } // Concatenate two string(s) (slices) and return a string slice #[macro_export] macro_rules! ss { ($x:expr, $y:expr) => ( &*format!("{}{}", $x, $y); ) } #[cfg(test)] mod tests { use super::*; #[test] fn s() { assert_eq!(s!("Hello"), String::from("Hello")); } #[test] fn ss() { assert_eq!(ss!("Hello", ", world"), "Hello, world"); let s1 = s!("Hello"); let s2 = s!(", world"); assert_eq!(ss!(s1, s2), "Hello, world"); } }