Учитывая следующее Rust:
struct E;
trait Fallible {
type Error: Into<E>;
fn e(&self) -> Result<(), Self::Error>;
}
fn test(f: &impl Fallible) -> Result<(), E> {
Ok(f.e()?)
}
Я пытаюсь express, чтобы тип Fallible::Error
мог быть преобразован в E
и, следовательно, должен использоваться с оператором ?
. Но по какой-то причине ?
основан на черте From
, которую я не уверен, что ее можно ограничить.
В настоящее время это не удается с:
error[E0277]: `?` couldn't convert the error to `E`
--> src/lib.rs:9:13
|
9 | Ok(f.e()?)
| ^ the trait `std::convert::From<<impl Fallible as Fallible>::Error>` is not implemented for `E`
|
= note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
= note: required by `std::convert::From::from`