servant/servant-examples/tutorial/T2.hs

53 lines
1.2 KiB
Haskell
Raw Normal View History

2015-11-05 02:13:24 +01:00
{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
2015-05-05 21:50:24 +02:00
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
2015-05-05 21:50:24 +02:00
{-# LANGUAGE TypeOperators #-}
2015-05-10 13:39:18 +02:00
module T2 where
2015-05-05 21:50:24 +02:00
import Data.Aeson
import Data.Time.Calendar
import GHC.Generics
import Network.Wai
import Servant
2015-05-05 21:50:24 +02:00
data User = User
{ name :: String
, age :: Int
, email :: String
2015-05-05 21:50:24 +02:00
, registration_date :: Day
} deriving (Eq, Show, Generic)
2015-11-05 02:13:24 +01:00
#if !MIN_VERSION_aeson(0,10,0)
2015-05-05 21:50:24 +02:00
-- orphan ToJSON instance for Day. necessary to derive one for User
instance ToJSON Day where
-- display a day in YYYY-mm-dd format
toJSON d = toJSON (showGregorian d)
2015-11-05 02:13:24 +01:00
#endif
2015-05-05 21:50:24 +02:00
instance ToJSON User
type UserAPI = "users" :> Get '[JSON] [User]
:<|> "albert" :> Get '[JSON] User
:<|> "isaac" :> Get '[JSON] User
isaac :: User
isaac = User "Isaac Newton" 372 "isaac@newton.co.uk" (fromGregorian 1683 3 1)
albert :: User
albert = User "Albert Einstein" 136 "ae@mc2.org" (fromGregorian 1905 12 1)
users :: [User]
users = [isaac, albert]
userAPI :: Proxy UserAPI
userAPI = Proxy
server :: Server UserAPI
server = return users
:<|> return albert
:<|> return isaac
app :: Application
app = serve userAPI EmptyConfig server