supernova-0.0.3: src/Pulsar/Protocol/CheckSum.hs
module Pulsar.Protocol.CheckSum where
import qualified Data.Binary as B
import Data.Bool ( bool )
import qualified Data.ByteString.Lazy.Char8 as CL
import Data.Digest.CRC32C ( crc32c )
data CheckSumValidation = Valid | Invalid deriving Show
newtype CheckSum = CheckSum B.Word32 deriving (Eq, Show)
runCheckSum :: CL.ByteString -> CheckSum -> CheckSumValidation
runCheckSum t cs = bool Invalid Valid $ computeCheckSum t == cs
computeCheckSum :: CL.ByteString -> CheckSum
computeCheckSum t = CheckSum $ crc32c (CL.toStrict t)