{-# LANGUAGE OverloadedStrings #-}
module Network.Greskell.WebSocket.Codec.JSON
( jsonCodec
) where
import Data.Aeson (ToJSON, FromJSON)
import qualified Data.Aeson as A
import Data.Aeson.Types (parseEither)
import Data.Greskell.GraphSON (FromGraphSON(..))
import Network.Greskell.WebSocket.Codec (Codec(..))
jsonCodec :: (FromGraphSON s) => Codec s
jsonCodec = Codec { mimeType = "application/json",
encodeWith = encode,
decodeWith = decode
}
where
encode = A.encode
decode bs = parseEither parseGraphSON =<< A.eitherDecode' bs