Deref has a simple rule: if you have a type T and it implements Deref<Target=F>, then &T coerces to &F, compiler will repeat this as many times as needed to get F, for example:
fn f(x: &str) -> &str { x }
fn main() {
// Compiler will coerce &&&&&&a...