{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
module Main where
import Control.Applicative
import Control.Lens
import Data.Aeson
import Data.Proxy
import qualified Data.Set as Set
import Data.Text (Text)
import qualified Data.Text.IO as T
import Data.Typeable
import GHC.Generics
import Language.PureScript.Bridge
import Language.PureScript.Bridge.PSTypes
import Servant.API
import Servant.Foreign
import Servant.PureScript
import Servant.PureScript.CodeGen
import Servant.PureScript.Internal
import Text.PrettyPrint.Mainland (hPutDocLn)
data Hello = Hello {
message :: Text
} deriving Generic
instance FromJSON Hello
instance ToJSON Hello
newtype TestHeader = TestHeader Text deriving (Generic, Show, Eq)
instance ToJSON TestHeader
type MyAPI = Header "TestHeader" TestHeader :> QueryFlag "myFlag" :> QueryParam "myParam" Hello :> QueryParams "myParams" Hello :> "hello" :> ReqBody '[JSON] Hello :> Get '[JSON] Hello
:<|> Header "TestHeader" Hello :> "testHeader" :> Get '[JSON] TestHeader
:<|> Header "TestHeader" TestHeader :> "by" :> Get '[JSON] Int
reqs = apiToList (Proxy :: Proxy MyAPI) (Proxy :: Proxy DefaultBridge)
req = head reqs
mySettings = addReaderParam "TestHeader" defaultSettings
myTypes :: [SumType 'Haskell]
myTypes = [
mkSumType (Proxy :: Proxy Hello)
, mkSumType (Proxy :: Proxy TestHeader)
]
moduleTranslator :: BridgePart
moduleTranslator = do
typeModule ^== "Main"
t <- view haskType
TypeInfo (_typePackage t) "ServerTypes" (_typeName t) <$> psTypeParameters
myBridge :: BridgePart
myBridge = defaultBridge <|> moduleTranslator
data MyBridge
instance HasBridge MyBridge where
languageBridge _ = buildBridge myBridge
myBridgeProxy :: Proxy MyBridge
myBridgeProxy = Proxy
main :: IO ()
main = do
writeAPIModuleWithSettings mySettings "test/output" myBridgeProxy (Proxy :: Proxy MyAPI)
writePSTypes "test/output" (buildBridge myBridge) myTypes