A blanket impl implements a trait for every type satisfying a bound, in one block:
impl<T: Display> Loggable for T {
fn log_line(&self) -> String {
format!("[log] {}", self)
}
}
Now 42.log_line() and "rpc down".log_line() both work, and so does every type anyone will ever write that implements Display.
The standard library uses this heavily. ToString is a blanket impl over Display; Into<U> is a blanket impl over From<T>. That is why implementing From gives you Into for free and you should never implement Into by hand.
