hecrj / coffee

An opinionated 2D game engine for Rust
https://docs.rs/coffee
MIT License
1.08k stars 55 forks source link

Trying using my own Renderer but result incompatible type for trait #131

Closed buxx closed 4 years ago

buxx commented 4 years ago

I'm trying to use my own renderer. So i declare it for my UserInterface:

use crate::ui::renderer::Renderer;
// ...
impl UserInterface for MyGame {
    type Message = Message;
    type Renderer = Renderer;
// ...

Where crate::ui::renderer::Renderer is copied from coffee:

Sélection_276

But, i can see this error for following:

use crate::ui::renderer::Renderer;  // my own
// ...
impl UserInterface for MyGame {
    type Message = Message;
    type Renderer = Renderer;
    // ...
    fn layout(&mut self, window: &Window) -> Element<Message> {
error[E0053]: method `layout` has an incompatible type for trait
   --> src/game.rs:388:5
    |
388 |     fn layout(&mut self, window: &Window) -> Element<Message> {
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `ui::renderer::Renderer`, found struct `coffee::ui::renderer::Renderer`
    |
    = note: expected fn pointer `fn(&mut game::MyGame, &coffee::graphics::window::Window) -> coffee::ui::core::element::Element<'_, _, ui::renderer::Renderer>`
               found fn pointer `fn(&mut game::MyGame, &coffee::graphics::window::Window) -> coffee::ui::core::element::Element<'_, _, coffee::ui::renderer::Renderer>`

I can see compiler see Element<'_, _, coffee::ui::renderer::Renderer>. How can i specify my own ? I'm already setting type with my own here: type Renderer = Renderer;

buxx commented 4 years ago

Problem was pure rust: I had to define my own pub type Element<'a, Message> = self::core::Element<'a, Message, Renderer>; where Renderer is mine.