aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2020-04-28 11:46:51 +0200
committerDaniel Schadt <kingdread@gmx.de>2020-04-28 11:46:51 +0200
commit4193165476a05fb4b07849c5371af3c8b328d6cb (patch)
treedc538907bb53b4bbe5e1de4e9ac87d5a9ab386e8
parent4c9adbcbbcea6d47c009d464c6f9d30a15b7fb1e (diff)
downloadevtclib-4193165476a05fb4b07849c5371af3c8b328d6cb.tar.gz
evtclib-4193165476a05fb4b07849c5371af3c8b328d6cb.tar.bz2
evtclib-4193165476a05fb4b07849c5371af3c8b328d6cb.zip
derive Hash for Player/Gadget/Character/Agent
It is very much possible and likely that someone would want to use a Player or Agent in a HashSet or HashMap, and there's no reason why that should be forbidden.
-rw-r--r--src/lib.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/lib.rs b/src/lib.rs
index f438460..ee9146a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -39,7 +39,7 @@ pub enum EvtcError {
}
/// Player-specific agent data.
-#[derive(Debug, Clone, PartialEq, Eq, CopyGetters)]
+#[derive(Debug, Clone, Hash, PartialEq, Eq, CopyGetters)]
pub struct Player {
/// The player's profession.
#[get_copy = "pub"]
@@ -73,7 +73,7 @@ impl Player {
}
/// Gadget-specific agent data.
-#[derive(Debug, Clone, PartialEq, Eq, CopyGetters)]
+#[derive(Debug, Clone, Hash, PartialEq, Eq, CopyGetters)]
pub struct Gadget {
#[get_copy = "pub"]
id: u16,
@@ -86,7 +86,7 @@ impl Gadget {
}
}
-#[derive(Debug, Clone, PartialEq, Eq, CopyGetters)]
+#[derive(Debug, Clone, Hash, PartialEq, Eq, CopyGetters)]
pub struct Character {
#[get_copy = "pub"]
id: u16,
@@ -100,7 +100,7 @@ impl Character {
}
/// The type of an agent.
-#[derive(Debug, Clone, PartialEq, Eq)]
+#[derive(Debug, Clone, Hash, PartialEq, Eq)]
pub enum AgentKind {
Player(Player),
Gadget(Gadget),
@@ -189,7 +189,7 @@ impl AgentKind {
/// `Kind`. An escape hatch is the method [`.erase()`][Agent::erase], which erases the kind
/// information and produces the default `Agent<()>`. Functions/methods that only take `Agent<()>`
/// can therefore be used by any other agent as well.
-#[derive(Debug, Clone, Getters, CopyGetters)]
+#[derive(Debug, Clone, Hash, PartialEq, Eq, Getters, CopyGetters)]
// For the reasoning of #[repr(C)] see Agent::transmute.
#[repr(C)]
pub struct Agent<Kind = ()> {