#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::ops::Shr; #[derive(PartialEq, Debug)] struct SpinVector { vec: Vec, } impl Shr for SpinVector { type Output = Self; fn shr(self, rhs: usize) -> Self::Output { let (a, b) = self.vec.split_at(self.vec.len() - rhs); let mut spun_vector = vec![]; spun_vector.extend_from_slice(b); spun_vector.extend_from_slice(a); Self { vec: spun_vector } } } fn main() { assert_eq!( SpinVector { vec : vec![0, 1, 2, 3, 4] } >> 2, SpinVector { vec : vec![3, 4, 0, 1, 2] } ); }