servant-kotlin-0.1.1.1: example/Generater.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
module Main where
import Data.Aeson (FromJSON, ToJSON)
import Data.Proxy (Proxy (Proxy))
import Data.Text (Text)
import GHC.Generics (Generic)
import Servant.API ((:<|>) (..), (:>), Capture,
Delete, FormUrlEncoded, Get, JSON,
Post, Put, ReqBody)
import Servant.Kotlin
import Shelly (cd, run_, shelly, which)
import Web.Internal.FormUrlEncoded (FromForm)
data Todo = Todo
{ todoId :: Int
, title :: Text
, done :: Bool
} deriving (Generic, Show, Eq, KotlinType)
instance FromJSON Todo
instance ToJSON Todo
instance FromForm Todo
type CRUD = "todos" :> Get '[JSON] [Todo]
:<|> "todos" :> ReqBody '[JSON, FormUrlEncoded] Todo :> Post '[JSON] Todo
:<|> "todos" :> Capture "id" Int :> ReqBody '[JSON, FormUrlEncoded] Todo :> Put '[JSON] ()
:<|> "todos" :> Capture "id" Int :> Delete '[JSON] ()
body :: [Text]
body = mconcat
[ [ defKotlinImports ]
, generateKotlinForAPIClass "TodoAPI" $ mconcat
[ generateKotlinForDefDataClass (Proxy :: Proxy Todo)
, generateKotlinForAPI (Proxy :: Proxy CRUD)
]
]
spec :: Spec
spec = Spec ["com", "github", "matsubara0507"] "TodoAPI" body
main :: IO ()
main = do
specsToDir [spec] "example/src/main/java"
shelly $ do
cd "example"
which "gradle" >>= mapM_ (\_ -> run_ "gradle" ["build"])