rust inherent associated types