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

----------------------------------------------------------------------

----------------------------------------------------------------------

-- |
-- Module: Web.Slack.Api
-- Description:
module Web.Slack.Api (
  TestReq (..),
  mkTestReq,
  TestRsp (..),
) where

-- FIXME: Web.Slack.Prelude

-- aeson

-- base

-- deepseq
import Control.DeepSeq (NFData)
import Data.Aeson.TH
-- http-api-data

-- slack-web

-- text
import Data.Text (Text)
import GHC.Generics (Generic)
import Web.FormUrlEncoded
import Web.Slack.Util
import Prelude

data TestReq = TestReq
  { TestReq -> Maybe Text
testReqError :: Maybe Text
  , TestReq -> Maybe Text
testReqFoo :: Maybe Text
  }
  deriving stock (TestReq -> TestReq -> Bool
(TestReq -> TestReq -> Bool)
-> (TestReq -> TestReq -> Bool) -> Eq TestReq
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TestReq -> TestReq -> Bool
== :: TestReq -> TestReq -> Bool
$c/= :: TestReq -> TestReq -> Bool
/= :: TestReq -> TestReq -> Bool
Eq, (forall x. TestReq -> Rep TestReq x)
-> (forall x. Rep TestReq x -> TestReq) -> Generic TestReq
forall x. Rep TestReq x -> TestReq
forall x. TestReq -> Rep TestReq x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TestReq -> Rep TestReq x
from :: forall x. TestReq -> Rep TestReq x
$cto :: forall x. Rep TestReq x -> TestReq
to :: forall x. Rep TestReq x -> TestReq
Generic, Int -> TestReq -> ShowS
[TestReq] -> ShowS
TestReq -> String
(Int -> TestReq -> ShowS)
-> (TestReq -> String) -> ([TestReq] -> ShowS) -> Show TestReq
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TestReq -> ShowS
showsPrec :: Int -> TestReq -> ShowS
$cshow :: TestReq -> String
show :: TestReq -> String
$cshowList :: [TestReq] -> ShowS
showList :: [TestReq] -> ShowS
Show)

instance NFData TestReq

$(deriveJSON (jsonOpts "testReq") ''TestReq)

instance ToForm TestReq where
  toForm :: TestReq -> Form
toForm =
    FormOptions -> TestReq -> Form
forall a.
(Generic a, GToForm a (Rep a)) =>
FormOptions -> a -> Form
genericToForm (Text -> FormOptions
formOpts Text
"testReq")

mkTestReq :: TestReq
mkTestReq :: TestReq
mkTestReq =
  TestReq
    { testReqError :: Maybe Text
testReqError = Maybe Text
forall a. Maybe a
Nothing
    , testReqFoo :: Maybe Text
testReqFoo = Maybe Text
forall a. Maybe a
Nothing
    }

data TestRsp = TestRsp
  { TestRsp -> Maybe TestReq
testRspArgs :: Maybe TestReq
  }
  deriving stock (TestRsp -> TestRsp -> Bool
(TestRsp -> TestRsp -> Bool)
-> (TestRsp -> TestRsp -> Bool) -> Eq TestRsp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TestRsp -> TestRsp -> Bool
== :: TestRsp -> TestRsp -> Bool
$c/= :: TestRsp -> TestRsp -> Bool
/= :: TestRsp -> TestRsp -> Bool
Eq, (forall x. TestRsp -> Rep TestRsp x)
-> (forall x. Rep TestRsp x -> TestRsp) -> Generic TestRsp
forall x. Rep TestRsp x -> TestRsp
forall x. TestRsp -> Rep TestRsp x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TestRsp -> Rep TestRsp x
from :: forall x. TestRsp -> Rep TestRsp x
$cto :: forall x. Rep TestRsp x -> TestRsp
to :: forall x. Rep TestRsp x -> TestRsp
Generic, Int -> TestRsp -> ShowS
[TestRsp] -> ShowS
TestRsp -> String
(Int -> TestRsp -> ShowS)
-> (TestRsp -> String) -> ([TestRsp] -> ShowS) -> Show TestRsp
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TestRsp -> ShowS
showsPrec :: Int -> TestRsp -> ShowS
$cshow :: TestRsp -> String
show :: TestRsp -> String
$cshowList :: [TestRsp] -> ShowS
showList :: [TestRsp] -> ShowS
Show)

instance NFData TestRsp

$(deriveFromJSON (jsonOpts "testRsp") ''TestRsp)