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
pub trait StringPlus { fn substring(&self, start: usize, length: usize) -> &str; fn at(&self, pos: usize) -> &str; } impl StringPlus for str { fn substring(&self, start: usize, length: usize) -> &str { &self[start..(start + length)] } fn at(&self, pos: usize) -> &str { &self[pos..pos + 1] } } #[cfg(test)] mod tests { use super::StringPlus; #[test] fn substring() { assert_eq!("Bangladesh".to_string().substring(0, 6), "Bangla"); assert_eq!("Bangladesh".substring(3, 4), "glad"); } #[test] fn at() { assert_eq!("Hello".at(1), "e"); assert_eq!("Object".to_string().at(3), "e"); } }