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

module Call(CallOption(..))
 where

import qualified Data.Time as T
import Lib
import Types
import Data.Aeson hiding (json)
import Language.Haskell.TH
import Data.Aeson.TH
import Data.Aeson.Types
import GHC.Generics

data CallOption = PoolBalance Balance    -- ^ triggered when pool perform balance below threshold
                | BondBalance Balance    -- ^ triggered when bond current balance below threshold
                | PoolFactor Rate        -- ^ triggered when pool factor (pool perform balance/origin balance)
                | BondFactor Rate        -- ^ triggered when bond factor (total bonds current balance / origin balance)
                | OnDate Date            -- ^ triggered at date
                | AfterDate Date         -- ^ triggered when after date
                | And [CallOption]       -- ^ triggered when all options were satisfied
                | Or [CallOption]        -- ^ triggered when any option is satisfied
                | PoolPv Balance         -- ^ Call when PV of pool fall below
                | Pre Pre                -- ^ triggered when predicate evaluates to be True
                deriving (Int -> CallOption -> ShowS
[CallOption] -> ShowS
CallOption -> String
(Int -> CallOption -> ShowS)
-> (CallOption -> String)
-> ([CallOption] -> ShowS)
-> Show CallOption
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CallOption -> ShowS
showsPrec :: Int -> CallOption -> ShowS
$cshow :: CallOption -> String
show :: CallOption -> String
$cshowList :: [CallOption] -> ShowS
showList :: [CallOption] -> ShowS
Show,(forall x. CallOption -> Rep CallOption x)
-> (forall x. Rep CallOption x -> CallOption) -> Generic CallOption
forall x. Rep CallOption x -> CallOption
forall x. CallOption -> Rep CallOption x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CallOption -> Rep CallOption x
from :: forall x. CallOption -> Rep CallOption x
$cto :: forall x. Rep CallOption x -> CallOption
to :: forall x. Rep CallOption x -> CallOption
Generic,Eq CallOption
Eq CallOption =>
(CallOption -> CallOption -> Ordering)
-> (CallOption -> CallOption -> Bool)
-> (CallOption -> CallOption -> Bool)
-> (CallOption -> CallOption -> Bool)
-> (CallOption -> CallOption -> Bool)
-> (CallOption -> CallOption -> CallOption)
-> (CallOption -> CallOption -> CallOption)
-> Ord CallOption
CallOption -> CallOption -> Bool
CallOption -> CallOption -> Ordering
CallOption -> CallOption -> CallOption
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CallOption -> CallOption -> Ordering
compare :: CallOption -> CallOption -> Ordering
$c< :: CallOption -> CallOption -> Bool
< :: CallOption -> CallOption -> Bool
$c<= :: CallOption -> CallOption -> Bool
<= :: CallOption -> CallOption -> Bool
$c> :: CallOption -> CallOption -> Bool
> :: CallOption -> CallOption -> Bool
$c>= :: CallOption -> CallOption -> Bool
>= :: CallOption -> CallOption -> Bool
$cmax :: CallOption -> CallOption -> CallOption
max :: CallOption -> CallOption -> CallOption
$cmin :: CallOption -> CallOption -> CallOption
min :: CallOption -> CallOption -> CallOption
Ord,CallOption -> CallOption -> Bool
(CallOption -> CallOption -> Bool)
-> (CallOption -> CallOption -> Bool) -> Eq CallOption
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CallOption -> CallOption -> Bool
== :: CallOption -> CallOption -> Bool
$c/= :: CallOption -> CallOption -> Bool
/= :: CallOption -> CallOption -> Bool
Eq,ReadPrec [CallOption]
ReadPrec CallOption
Int -> ReadS CallOption
ReadS [CallOption]
(Int -> ReadS CallOption)
-> ReadS [CallOption]
-> ReadPrec CallOption
-> ReadPrec [CallOption]
-> Read CallOption
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS CallOption
readsPrec :: Int -> ReadS CallOption
$creadList :: ReadS [CallOption]
readList :: ReadS [CallOption]
$creadPrec :: ReadPrec CallOption
readPrec :: ReadPrec CallOption
$creadListPrec :: ReadPrec [CallOption]
readListPrec :: ReadPrec [CallOption]
Read)

$(deriveJSON defaultOptions ''CallOption)