Can somebody please help me with this example. My target is to have trait TraitObjectBuilder with method build_objects which return another generic which implement trait MyObject. Link to same code on playground is here.
Code
// ----- Traits -----
trait TraitObject {
fn foo(&self);
}
trait TraitObjectBuilder {
fn build_objects<T>(&self) -> T
where
T: TraitObject;
}
// ----- Structs -----
struct MyObject {}
impl TraitObject for MyObject {
fn foo(&self) {
println!("Hello");
}
}
struct MyObjectBuilder {}
impl TraitObjectBuilder for MyObjectBuilder {
fn build_objects<T>(&self) -> T
where
T: TraitObject,
{
MyObject {}
}
}
// ----- Enums -----
enum Something<T>
where
T: TraitObjectBuilder,
{
One,
Two,
Three(T),
}
fn main() {
let a = MyObjectBuilder {};
let b = Something::Three(a);
println!("Hello, world!");
}
Error:
--> src/main.rs:29:9
|
25 | fn build_objects<T>(&self) -> T
| - - expected `T` because of return type
| |
| this type parameter
...
29 | MyObject {}
| ^^^^^^^^^^^ expected type parameter `T`, found struct `MyObject`
|
= note: expected type parameter `T`
found struct `MyObject`
A browser interface to the Rust compiler to experiment with the language