module Prolude.Uuid
  ( -- * Type alias
    Uuid
    -- * Functions
  , randomUuid
  , textToUuid
  , uuidToText
  , wordsToUuid
  )
where

import qualified Control.Monad.IO.Class as Monad
import qualified Data.Maybe as Maybe
import qualified Data.Text as Text
import qualified Data.UUID as UUID
import qualified Data.UUID.V4 as UUID
import qualified Data.Word as Word

type Uuid = UUID.UUID

-- | Converts a Uuid to Text
uuidToText :: Uuid -> Text.Text
uuidToText :: Uuid -> Text
uuidToText = Uuid -> Text
UUID.toText

-- | Converts a Text to a Maybe Uuid
textToUuid :: Text.Text -> Maybe.Maybe Uuid
textToUuid :: Text -> Maybe Uuid
textToUuid = Text -> Maybe Uuid
UUID.fromText

-- | Creates a Uuid from Words
wordsToUuid :: Word.Word32 -> Word.Word32 -> Word.Word32 -> Word.Word32 -> Uuid
wordsToUuid :: Word32 -> Word32 -> Word32 -> Word32 -> Uuid
wordsToUuid = Word32 -> Word32 -> Word32 -> Word32 -> Uuid
UUID.fromWords

-- | Returns a randomUuid
randomUuid :: Monad.MonadIO m => m Uuid
randomUuid :: forall (m :: * -> *). MonadIO m => m Uuid
randomUuid = forall (m :: * -> *) a. MonadIO m => IO a -> m a
Monad.liftIO IO Uuid
UUID.nextRandom