packages feed

postie-0.6.0.2: src/Network/Mail/Postie/SessionID.hs

module Network.Mail.Postie.SessionID
  ( SessionID,
    -- | Unique session identifier
    mkSessionID,
    -- | Creates a SessionID
    toByteString,
    -- | Converts SessionID to ByteString
  )
where

import Data.ByteString (ByteString)
import Data.Typeable (Typeable)
import Data.UUID (UUID, toASCIIBytes, toString)
import Data.UUID.V4 (nextRandom)

newtype SessionID = SessionID {toUUID :: UUID}
  deriving (Eq, Ord, Typeable)

instance Show SessionID where
  show = toString . toUUID

mkSessionID :: IO SessionID
mkSessionID = SessionID `fmap` nextRandom

toByteString :: SessionID -> ByteString
toByteString = toASCIIBytes . toUUID