packages feed

freckle-app-1.0.3.0: library/Freckle/App/Memcached/CacheTTL.hs

module Freckle.App.Memcached.CacheTTL
  ( CacheTTL
  , cacheTTL
  , fromCacheTTL
  ) where

import Freckle.App.Prelude

import Data.Word (Word32)
import Database.Memcache.Types (Expiration)

newtype CacheTTL = CacheTTL Int
  deriving stock Show
  deriving newtype (Eq, Ord, Enum, Num, Real, Integral)

cacheTTL :: Int -> CacheTTL
cacheTTL = CacheTTL

fromCacheTTL :: CacheTTL -> Expiration
fromCacheTTL (CacheTTL i)
  | i < fromIntegral minWord = minWord
  | i > fromIntegral maxWord = maxWord
  | otherwise = fromIntegral i
 where
  minWord :: Word32
  minWord = minBound

  maxWord :: Word32
  maxWord = maxBound