git-annex-10.20260624: Utility/Hash/Types.hs
{- Hash types
-
- Copyright 2026 Joey Hess <id@joeyh.name>
-
- License: BSD-2-clause
-}
{-# LANGUAGE DeriveGeneric #-}
module Utility.Hash.Types where
import qualified Data.ByteString as S
import Data.ByteArray
import qualified Data.ByteArray.Encoding as BAE
import Data.String
import Control.DeepSeq
import GHC.Generics
import Prelude hiding (length)
import Utility.FileSystemEncoding
-- base16 encoded hash
newtype Hash = Hash { hashByteString :: S.ByteString }
deriving (Eq, Generic)
instance Show Hash where
show (Hash v) = decodeBS v
instance IsString Hash where
fromString = Hash . encodeBS
instance NFData Hash
-- the raw hash digest
newtype HashDigest = HashDigest S.ByteString
deriving (Eq, Generic)
digestToHash :: HashDigest -> Hash
digestToHash (HashDigest d) = Hash $ BAE.convertToBase BAE.Base16 d
instance NFData HashDigest
instance ByteArrayAccess HashDigest where
length (HashDigest d) = length d
withByteArray (HashDigest d) = withByteArray d