module Network.PinPon.Util
  ( recordTypeJSONOptions
  , recordTypeSwaggerOptions
  , encodeText
  ) where

import Protolude
import Control.Lens ((^.), strict)
import Data.Aeson (ToJSON, encode)
import Data.Aeson.Types (Options(..), camelTo2, defaultOptions)
import Data.Text (Text)
import Data.Text.Strict.Lens (utf8)
import qualified Data.Swagger as Swagger (SchemaOptions(..))
import Data.Swagger (defaultSchemaOptions)

recordTypeJSONOptions :: Options
recordTypeJSONOptions =
  defaultOptions {fieldLabelModifier = drop 1
                 ,constructorTagModifier = camelTo2 '_'}

recordTypeSwaggerOptions :: Swagger.SchemaOptions
recordTypeSwaggerOptions =
  defaultSchemaOptions {Swagger.fieldLabelModifier = drop 1
                       ,Swagger.constructorTagModifier = camelTo2 '_'}

encodeText :: ToJSON a => a -> Text
encodeText a = encode a ^. strict . utf8