I'm new to Rust language and want to create a small game to learn it.
I would like to have a **PlayerTrait** trait that would be applied to 2 types of players : **LocalPlaye**r and **Computer**, like that : 

```
struct LocalPlayer{
//...
}

struct Computer {
//...
}

trait PlayerTrait {
    fn play_turn(&self);
}

impl PlayerTrait for LocalPlayer{...}
impl PlayerTrait for Computer{...}

```

Like with java interfaces, I would then like to be able to write generic code that would do different stuff depending on if it's an AI or an actual player.

After some research in vain, my Game struct looks like that :

```
struct Game<T:PlayerTrait> {
   player1 : T,
   player2 : T
}

impl<T:PlayerTrait>  Game<T> {
    pub fn new() -> Self {
        Game {
            player1 : LocalPlayer::new(),
            player2 : Computer::new()
        }
    }

}

```

However, I can't instantiate a player.

My **LocalPlayer** new() method looks like that: (the **Computer**'s one is quite the same for now)

```

impl LocalPlayer{
   pub fn new() -> Self {
        LocalPlayer {
            //...
        }
    }
}

```

gives :
`... expected type parameter `T`, found struct `util::game::player::LocalPlayer`

Both LocalPlayer and Computer are implementing the trait,so I don't understand why it does not compile. I've tried changing the return type for `-> impl PlayerTrait`, `-> Box<PlayerTrait>`(after lurking on different websites) and still couldn't manage to make it work. 
Sorry if it's a stupid question, am I missing something?

If it might help, while tinkering with the code I would quite often get this error too :
`... expected type 'T' parameter , found opaque type`