diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2025-06-13 11:29:29 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2025-06-13 11:29:29 +0000 |
| commit | 04891bbcaac75e887d57844548b61141cb6ebc07 (patch) | |
| tree | 9be7b87519c95ab1bd1d03895042b67e79b127a0 /src/hasher.rs | |
Init
Diffstat (limited to 'src/hasher.rs')
| -rw-r--r-- | src/hasher.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/hasher.rs b/src/hasher.rs new file mode 100644 index 0000000..028e73a --- /dev/null +++ b/src/hasher.rs @@ -0,0 +1,42 @@ +use sha2::{Digest, Sha256}; + +pub trait Hasher { + fn hash(&self, input: &str) -> String; +} + +pub struct DefaultHasher; + +impl Hasher for DefaultHasher { + fn hash(&self, input: &str) -> String { + let mut hasher = Sha256::new(); + hasher.update(input.as_bytes()); + hex::encode(hasher.finalize()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_default_hasher_with_known_input() { + let hasher = DefaultHasher; + let input = "hello"; + let expected_hash = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"; + + let actual_hash = hasher.hash(input); + + assert_eq!(actual_hash, expected_hash); + } + + #[test] + fn test_default_hasher_empty_string() { + let hasher = DefaultHasher; + let input = ""; + let expected_hash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; + + let actual_hash = hasher.hash(input); + + assert_eq!(actual_hash, expected_hash); + } +} |
