1use crate::Updatable;
2use serde::de::DeserializeOwned;
3use serde::Serialize;
4use std::fmt::Debug;
5use std::hash::Hash;
6pub trait IDTrait: Eq + Hash + Send + Sync + DeserializeOwned + Serialize + Debug + Clone {}
7impl<T: Eq + Hash + Send + Sync + DeserializeOwned + Serialize + Debug + Clone> IDTrait for T {}
8
9pub trait UpdateTrait: Send + Sync + Serialize + DeserializeOwned + Debug + Clone {}
10impl<T: Send + Sync + Serialize + DeserializeOwned + Debug + Clone> UpdateTrait for T {}
11
12pub trait ProtoEntity<U: UpdateTrait>:
13 Serialize
14 + DeserializeOwned
15 + Clone
16 + Eq
17 + Updatable<U>
18 + Send
19 + Sync
20 + Unpin
21 + Debug
22 + 'static {}
23impl<U: UpdateTrait, T:
24 Serialize
25 + DeserializeOwned
26 + Clone
27 + Eq
28 + Updatable<U>
29 + Send
30 + Sync
31 + Unpin
32 + Debug
33 + 'static> ProtoEntity<U> for T {}
34
35pub trait Entity: ProtoEntity<Self::Update>
36{
37 type Update: UpdateTrait;
38 type ID: IDTrait;
39 const TYPE_NAME: &'static str;
40
41 fn get_id(&self) -> &Self::ID;
42}