Sometimes, we need our type to have generic type parameters, but we don't want them to be totally generic. For example, we might need the type that's substituted for the parameter to be able to be moved between threads, or to support transformation into String, or any number of other things. Fortunately, Rust provides a way for us to do that.
We limit the domain of a generic type parameter by requiring it to have one or more traits. This is called a trait bound. Let's look at a basic binary tree data structure as an example.
A binary tree is made up of nodes. Each node has a key, an associated value, and two sub-trees: one for nodes with keys that are less than the current node's key, and one for nodes with keys that are greater. Finding a node with a particular key in the tree is just a matter of comparing...