{-# LANGUAGE DataKinds #-}

{-| Functions for encoding RFC 9562 UUIDs in RFC 8259 JSONs.
 -}

module Codec.JSON.Encoder.UUID
  ( uuid
  ) where

import           Codec.JSON.Encoder.Unsafe

import           Data.ByteString.Builder
import           Data.UUID.Types as UUID



-- | Encode a 'UUID' as a JSON string, in lower-case hexadecimal
--   @xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@ format ("hex-and-dash"),
uuid :: UUID -> Encoder
uuid :: UUID -> Encoder
uuid UUID
u = Builder -> Encoder
Encoder (Builder -> Encoder) -> Builder -> Encoder
forall a b. (a -> b) -> a -> b
$ Word8 -> Builder
word8 Word8
0x22 Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> StrictByteString -> Builder
byteString (UUID -> StrictByteString
UUID.toASCIIBytes UUID
u) Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word8 -> Builder
word8 Word8
0x22