You are quite right regarding this. There are the Deref and DerefMut traits which allow a type to be borrowed as another type, ie, by default borrowing T will always create &T or &mut T. However, as you have noted for Vec, it can be borrowed as &Vec<T> or as &[T]. This is because Vec has impls for Deref and for DerefMut.
This automatic "conversion", ie, deciding when to apply the Deref trait is known as deref coercion.