-- |
-- 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       (Object, ToJSON (..), Value (Object), genericParseJSON,
                                   genericToEncoding, genericToJSON)
import           Data.Aeson.Types (Options, defaultOptions, omitNothingFields)

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

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