Took the liberty to share another screenshot where type annotation is extremely useful, if it is ok
(please ignore the colors, I have notably terrible taste)
You can see that the expected return type for example is `<I2C as I2c<u8>>::WriteFuture` (this is an async driver for a magnetometer using I2C protocol) or a `Result<(), CommE>`.
In the first case, it shows that an I2C type is coerced to a WriteFuture, and in the second case that the code will return either a Result with the
unit type`()` that all is well, or a `CommE`, a communication error defined by the programmer.
I forked a blocking driver to convert it to async and those types annotations were extremely useful to me as I was not sure of all what was happening in the magnetometer (just needed to make an async version).
Edit: my screenshot is a bit too big, sorry about that.