/
mod.rs
47 lines (39 loc) · 1.44 KB
/
mod.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use self::player::delete::PlayerDeleteLambdaArgs;
use self::player::update::PlayerUpdateLambdaArgs;
use self::{player::create::PlayerCreateLambdaArgs, team::create::TeamCreateLambdaArgs};
use crate::entities::player::Player;
use crate::entities::{team::Team};
use crate::services::commands::{player::PlayerInput, team::TeamInput};
use std::{future::Future, pin::Pin};
pub mod player;
pub mod team;
pub trait RepoTrait: Send + Sync + RepoPlayer + RepoTeam {}
impl<T: RepoPlayer + RepoTeam> RepoTrait for T {}
pub type Lambda<'a, ArgT, ResT> =
dyn 'a + Fn(ArgT) -> Pin<Box<dyn Future<Output = Result<ResT, String>> + Send + 'a>> + Sync;
#[async_trait::async_trait]
pub trait RepoPlayer: Send + Sync {
async fn player_create<'a>(
&'a self,
input: &PlayerInput,
lambda: &Lambda<PlayerCreateLambdaArgs, Player>,
) -> Result<Player, String>;
async fn player_delete<'a>(
&'a self,
id: &str,
lambda: &Lambda<PlayerDeleteLambdaArgs, ()>,
) -> Result<(), String>;
async fn player_update<'a>(
&'a self,
input: &PlayerInput,
lambda: &Lambda<PlayerUpdateLambdaArgs, Player>,
) -> Result<Player, String>;
}
#[async_trait::async_trait]
pub trait RepoTeam: Send + Sync {
async fn team_create<'a>(
&'a self,
input: &TeamInput,
lambda: &Lambda<TeamCreateLambdaArgs, Team>,
) -> Result<Team, String>;
}