I'm not sure if this is an issue with the current implementation of associated_type_defaults
or a larger problem with the RFC. Here's the example:
#![feature(associated_type_defaults, associated_type_bounds)]
trait View {
type Deserializers: Deserializer<Item = Self::RequestParams>;
type RequestParams = DefaultRequestParams;
}
struct DefaultRequestParams;
trait Deserializer {
type Item;
fn deserialize(r: impl Read) -> Self::Item;
}
And the error:
error[E0271]: type mismatch resolving `<<Self as View>::Deserializers as Deserializer>::Item == DefaultRequestParams`
--> src\lib.rs:17:38
|
14 | trait View {
| -------------- required by `View`
...
17 | type Deserializers: Deserializer<Item = Self::RequestParams>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `DefaultRequestParams`, found associated type
|
= note: expected struct `DefaultRequestParams`
found associated type `<Self as View>::RequestParams`
= help: consider constraining the associated type `<Self as View>::RequestParams` to `DefaultRequestParams`
= note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
In this case I want the bound to be the as-of-yet-unspecified type View::RequestParams
not the concrete default type. This compiles and works without the default.
Is there another way to specify that the type in the bound should be View::RequestParams
or is this case currently unimplemented/impossible?