module Network.MessagePack.Types.Server
( MethodVal (..)
, MethodDocs (..)
, MethodType (..)
, Method (..)
, method
) where
import Control.Monad (Monad)
import Data.MessagePack (Object)
import Data.Text (Text)
data MethodVal = MethodVal
{ valName :: !Text
, valType :: !Text
}
deriving (Show)
data MethodDocs = MethodDocs
{ methodArgs :: ![MethodVal]
, methodRetv :: !MethodVal
}
deriving (Show)
data Method m = Method
{ methodName :: !Text
, methodDocs :: !MethodDocs
, methodBody :: [Object] -> m Object
}
class Monad m => MethodType m f where
toBody :: Text -> f -> [Object] -> m Object
method
:: MethodType m f
=> Text
-> MethodDocs
-> f
-> Method m
method name docs body = Method name docs $ toBody name body