module Freckle.App.Memcached.MD5
  ( md5CacheKey
  , md5Key
  , md5Text
  ) where

import Freckle.App.Prelude

import qualified Data.ByteString.Lazy as BSL
import qualified Data.Digest.Pure.MD5 as Digest
import Freckle.App.Memcached.CacheKey

md5CacheKey :: Show a => a -> CacheKey
md5CacheKey :: forall a. Show a => a -> CacheKey
md5CacheKey = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (forall a. HasCallStack => [Char] -> a
error [Char]
"md5 is always cacheable") forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Either [Char] CacheKey
cacheKey forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> Text
md5Key

-- | Pack any showable into an md5 encoded text
md5Key :: Show a => a -> Text
md5Key :: forall a. Show a => a -> Text
md5Key = Text -> Text
md5Text forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Text
pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> [Char]
show

md5Text :: Text -> Text
md5Text :: Text -> Text
md5Text = [Char] -> Text
pack forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> [Char]
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> MD5Digest
Digest.md5 forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
BSL.fromStrict forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
encodeUtf8