Implement traits defined in your crate on types from your crate
Implement traits defined in your crate on types from another crate
Implement traits defined in another crate on types from your crate
This means that you cannot implement traits defined in another crate on types defined in another trait.
So my advice would be to simply define a function that performs the conversion you want.
Also, a side comment - you want to convert from a Result<T, Vec<E1>> to a Result<T, Vec<E2>>. Which means you are probably transforming the error type (I assume). This is precisely the task performed by map_err method on Result.
The error indicates that the conflict is with an impl for this in the std/core library:
[rustc E0119] [E] conflicting implementations of trait `std::convert::
From<MyErr<_, _>>` for type `MyErr<_, _>`
conflicting implementation in crate `core`:
- impl<T> From<T> for T;
(It would save time if you include the error message when reporting problems.)
I think the error is saying that impl<T> From<T> for T already implements the conversion. I'm guessing that the orphan rule (described by @RedDocMD above) restricts you from implementing this conversion because the type parameters you're specifying are completely general, so you're not providing a more specific implementation than the one that is already defined.
Just a guess after playing around with this for a while. But it seems confirmed by the fact that this implementation with specific type params is accepted:
Which conflicts with the blanket implementation mentioned
impl From<T> for T { /* ... */ }
And coherence says you can only ever have one implementation (until we get specialization which says instead it must be unambiguous), hence, the error.
Coherence is also why adding a blanket implementation over your own trait is a breaking change. It's not the orphan rules in the example above, where you own the type.