Traits are a power you add for some type
Debug trait for example, however type implements this trait should have the power to print debug information
Ask you self “This is a … ?” if you find an answer then you mean to define a type but if you answer “The type implementing this can … ?” then you mean to define a trait
traits are not Interfaces in OOP languages, okay they have similarities but the semantic of traits is just to add power , it’s not about Abstraction, Inheritance, and all these stuff
Traits represent properties Types can be built-in types, &type, &mut type, your defined type impl blocks connects the 2 parts trait with a specific type