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");
    }
}