{-# LANGUAGE TemplateHaskell, OverloadedStrings, DeriveGeneric, StandaloneDeriving #-}

module Test.TestAPIImpl where

import GHC.Generics
import qualified Data.Text as T
import Data.Aeson

import Network.YAML

data User = User {fullName :: T.Text, login :: T.Text}
  deriving (Eq, Show)

deriving instance Generic User
instance FromJSON User
instance ToJSON User

data Something = Something {smthText :: T.Text, smthList :: [T.Text]}
  deriving (Eq, Show, Generic)

instance FromJSON Something
instance ToJSON Something

sayHello :: User -> IO T.Text
sayHello user = return $ "Hello, " `T.append` fullName user `T.append` "!"

testSmth :: T.Text -> Something -> IO User
testSmth t s = return $ User {login = t `T.append` smthText s, fullName = T.intercalate " " (smthList s)}

api :: API
api = $(makeAPI "http://home.iportnov.ru/test.api" [''User, ''Something] ['sayHello, 'testSmth])

$(writeAPI "test.api" "http://home.iportnov.ru/test.api" [''User, ''Something] ['sayHello, 'testSmth])