summaryrefslogtreecommitdiff
path: root/src/hashable.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2023-10-17 21:17:55 -0400
committerOwen Jacobson <owen@grimoire.ca>2023-10-17 22:32:21 -0400
commit288205e302d9f6afa06b8602184e983d2080a5b6 (patch)
treedfb307e8f3cb82d280e5a0392f11318194e09ef1 /src/hashable.rs
CLI tool for updating Route53 DNS for an ASG.
Diffstat (limited to 'src/hashable.rs')
-rw-r--r--src/hashable.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/hashable.rs b/src/hashable.rs
new file mode 100644
index 0000000..22bcdd3
--- /dev/null
+++ b/src/hashable.rs
@@ -0,0 +1,37 @@
+use std::fmt::Debug;
+use std::hash::{Hash, Hasher};
+
+use aws_sdk_route53::types::ResourceRecordSet;
+
+pub trait SimpleHash {
+ fn hash<H: Hasher>(&self, state: &mut H);
+}
+
+#[derive(Debug, PartialEq, Clone)]
+pub struct Hashable<T>(T);
+
+impl<T> AsRef<T> for Hashable<T> {
+ fn as_ref(&self) -> &T {
+ &self.0
+ }
+}
+
+impl<T> Eq for Hashable<T> where Hashable<T>: PartialEq {}
+
+impl<T: SimpleHash> Hash for Hashable<T> {
+ fn hash<H: Hasher>(&self, state: &mut H) {
+ self.0.hash(state)
+ }
+}
+
+impl<T> From<T> for Hashable<T> {
+ fn from(value: T) -> Self {
+ Self(value)
+ }
+}
+
+impl SimpleHash for ResourceRecordSet {
+ fn hash<H: Hasher>(&self, state: &mut H) {
+ self.name().hash(state)
+ }
+}