servant-elm-0.1.0.0: src/Servant/Elm/Request.hs
{-# LANGUAGE TypeOperators #-}
module Servant.Elm.Request where
import Servant.Foreign (QueryArg, Segment)
data Request = Request
{ typeDefs :: [String]
, decoderDefs :: [String]
, encoderDefs :: [String]
, decoder :: String
, fnName :: [String]
, fnSignature :: [String]
, urlSegments :: [Segment]
, urlQueryStr :: [QueryArg]
, httpMethod :: String
, argNames :: [String]
, bodyEncoder :: Maybe String
} deriving (Show)
defRequest :: Request
defRequest = Request
{ typeDefs = []
, decoderDefs = []
, encoderDefs = []
, decoder = ""
, fnName = []
, fnSignature = []
, httpMethod = "GET"
, urlSegments = []
, urlQueryStr = []
, argNames = []
, bodyEncoder = Nothing
}
addTypeDefs :: [String] -> Request -> Request
addTypeDefs elmTypes request = request { typeDefs = typeDefs request ++ elmTypes }
addFnName :: String -> Request -> Request
addFnName name request = request { fnName = name : fnName request }
addUrlSegment :: Segment -> Request -> Request
addUrlSegment segment request = request { urlSegments = segment : urlSegments request }
addUrlQueryStr :: QueryArg -> Request -> Request
addUrlQueryStr arg request = request { urlQueryStr = arg : urlQueryStr request }
-- TODO: perhaps we could get rid of most of the fnSignature stuff now that
-- servant-foreign allows us to keep it in their Arg type.
addFnSignature :: String -> Request -> Request
addFnSignature name request = request { fnSignature = name : fnSignature request }
setDecoder :: String -> Request -> Request
setDecoder dec request = request { decoder = dec }
addDecoderDefs :: [String] -> Request -> Request
addDecoderDefs defs request = request { decoderDefs = decoderDefs request ++ defs }
addArgName :: String -> Request -> Request
addArgName name request = request { argNames = name : argNames request }
setHttpMethod :: String -> Request -> Request
setHttpMethod method request = request { httpMethod = method }
setBodyEncoder :: String -> Request -> Request
setBodyEncoder encoder request = request { bodyEncoder = Just encoder }
addEncoderDefs :: [String] -> Request -> Request
addEncoderDefs defs request = request { encoderDefs = encoderDefs request ++ defs }