#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::ops::Rem; #[derive(PartialEq, Debug)] struct SplitSlice<'a, T> { slice: &'a [T], } impl<'a, T> Rem for SplitSlice<'a, T> { type Output = Self; fn rem(self, modulus: usize) -> Self::Output { let len = self.slice.len(); let rem = len % modulus; let start = len - rem; Self { slice: &self.slice[start..], } } } fn main() { assert_eq!( SplitSlice { slice : & [0, 1, 2, 3, 4, 5, 6, 7] } % 3, SplitSlice { slice : & [6, 7] } ); }