1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
pub fn try_slice<T>(arr: &[T], start: usize, end: usize) -> &[T] {
    let minor_end = if arr.len() < end { arr.len() } else { end };

    &arr[start..minor_end]
}

pub fn try_slice_by_size<T>(payload: &[T], location_start: usize, size: usize) -> Option<&[T]> {
    if payload.len() < location_start {
        return None;
    }

    let end = if payload.len() <= (location_start + size) {
        payload.len()
    } else {
        location_start + size
    };

    let v = &payload[location_start..end];
    if v.len() == 0 {
        None
    } else {
        Some(v)
    }
}