summaryrefslogtreecommitdiff
path: root/src/checksummer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/checksummer.rs')
-rw-r--r--src/checksummer.rs32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/checksummer.rs b/src/checksummer.rs
index 162c26b..18b8afb 100644
--- a/src/checksummer.rs
+++ b/src/checksummer.rs
@@ -1,8 +1,30 @@
use sha2::{Digest, Sha256};
+use std::fmt;
-pub fn sha256(data: &[u8]) -> String {
- let mut hasher = Sha256::new();
- hasher.update(data);
- let hash = hasher.finalize();
- format!("{:x}", hash)
+/// A checksum of some data.
+#[derive(Debug, Clone)]
+pub enum Checksum {
+ Sha256(String),
+}
+
+impl Checksum {
+ pub fn sha256(data: &[u8]) -> Self {
+ let mut hasher = Sha256::new();
+ hasher.update(data);
+ let hash = hasher.finalize();
+ Self::Sha256(format!("{:x}", hash))
+ }
+
+ pub fn sha256_from_str_unchecked(hash: &str) -> Self {
+ Self::Sha256(hash.to_string())
+ }
+}
+
+impl fmt::Display for Checksum {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ let hash = match self {
+ Self::Sha256(hash) => hash,
+ };
+ write!(f, "{}", hash)
+ }
}