packages feed

hash-addressed-cli-2.1.0.0: library/HashAddressed/App/HashFunction/Naming.hs

module HashAddressed.App.HashFunction.Naming
  (
    HashFunctionName (..),
    readHashFunctionText,
    readHashFunctionString,
    showHashFunction,
    normalizeHashFunction,
    hashFunctions,
    resolveHashFunction,
  )
  where

import Essentials

import Data.Bool (not)
import HashAddressed.HashFunction (HashFunction)
import Prelude (String)

import qualified Data.Char as Char
import qualified Data.List as List
import qualified Data.Text as Strict
import qualified Data.Text as Strict.Text
import qualified HashAddressed.HashFunction as Hash

data HashFunctionName = SHA_256
    deriving Eq

resolveHashFunction :: HashFunctionName -> HashFunction
resolveHashFunction = \case
    SHA_256 -> Hash.sha256

hashFunctions :: [(String, HashFunctionName)]
hashFunctions = [(showHashFunction SHA_256, SHA_256)]

readHashFunctionText :: Strict.Text -> Maybe HashFunctionName
readHashFunctionText = Strict.Text.unpack >>> readHashFunctionString

readHashFunctionString :: String -> Maybe HashFunctionName
readHashFunctionString x = List.lookup x hashFunctions

showHashFunction :: HashFunctionName -> String
showHashFunction = \case
    SHA_256 -> "sha256"

normalizeHashFunction :: String -> String
normalizeHashFunction =
    List.map Char.toLower . List.filter (\x -> not (List.elem x " -_"))