{-# LANGUAGE DeriveGeneric         #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell       #-}
{-# LANGUAGE TypeFamilies          #-}

module Data.GS1.EventId (EventId(..)) where

import           Control.Lens
import           Data.Aeson.TH   (defaultOptions, deriveJSON)
import           Data.Swagger
import           Data.UUID       as UUID
import           GHC.Generics    (Generic)
import           Web.HttpApiData (FromHttpApiData, parseQueryParam)


newtype EventId = EventId {unEventId :: UUID}
  deriving (Show, Eq, Generic, Read)


makeWrapped ''EventId

instance FromHttpApiData EventId where
  parseQueryParam httpData = EventId <$> parseQueryParam httpData

$(deriveJSON defaultOptions ''EventId)
instance ToSchema EventId

instance ToParamSchema EventId where
  toParamSchema _ = mempty
    & type_ .~ SwaggerString