-- |
-- Module: Network.Greskell.WebSocket.Request.Aeson
-- Description: parser support
-- Maintainer: Toshio Ito <debug.ito@gmail.com>
--
-- __Internal module. End-users should not use this.__
module Network.Greskell.WebSocket.Request.Aeson
       ( genericToJSON, genericToEncoding, genericParseJSON,
         opt,
         toObject
       ) where

import Data.Aeson
  ( genericToJSON, genericToEncoding, genericParseJSON,
    ToJSON(..), Object, Value(Object)
  )
import Data.Aeson.Types 
  ( defaultOptions, omitNothingFields, Options
  )

opt :: Options
opt :: Options
opt = Options
defaultOptions { omitNothingFields :: Bool
omitNothingFields = Bool
True }

toObject :: (ToJSON a) => a -> Object
toObject :: a -> Object
toObject = Value -> Object
expectObject (Value -> Object) -> (a -> Value) -> a -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Value
forall a. ToJSON a => a -> Value
toJSON
  where
    expectObject :: Value -> Object
expectObject (Object Object
o) = Object
o
    expectObject Value
_ = [Char] -> Object
forall a. HasCallStack => [Char] -> a
error [Char]
"Expect Object, but got something else"