struct Slice { data: T*; len: usize; } impl Slice { fn length(self) -> usize { return self.len; } fn is_empty(self) -> bool { return self.len == 0; } fn get(self, idx: usize) -> Option { if (idx >= self.len) { return Option::None(); } return Option::Some(self.data[idx]); } fn at(self, idx: usize) -> Option { if idx >= self.len { return Option::None(); } return Option::Some(self.data[idx]); } }