I had a misconception in Rustlang that the generic types &T and &mut T are not subset of generic type T. It turned out to be totally wrong. Generic Type T includes both &T and &mut T. It is quite easy to get believed that &T and &mut T are not part of T .
but actually it is as below
I think below is the proper definition of reference types in Rust - &mut T - is the exclusive reference to the value and &T is the shared reference to the value.
When you have exclusive reference(&mut T) to a value, you can mutate it and guarantees no other references for it at that point of time.
Example:
In the example program the function 'print' has type with trait debug and it is a generic type T.
We are able to pass the &v, &mut v and v to the print function. Meaning the type check T is able to accept the exclusive reference and shared references.
Reference: