{-# LANGUAGE DeriveFunctor, DeriveFoldable, DeriveTraversable #-}

module Data.JsonRpc.Request (
  Request(..), request,
  ) where

import Prelude hiding (id)
import Data.Text (Text, pack)
import Data.Foldable (Foldable)
import Data.Traversable (Traversable)

import Data.JsonRpc.Id (Id)


data Request a =
  Request
  { jsonrpc :: !Text
  , method  :: !Text
  , params  :: !(Maybe a)
  , id      :: !(Maybe Id)
  } deriving (Eq, Show, Read, Functor, Foldable, Traversable)

request :: Text -> Maybe a -> Maybe Id -> Request a
request = Request $ pack "2.0"