module Network.DigitalOcean.Services.LoadBalancer where
import Data.Aeson
import Data.Aeson.Casing
import Data.Time.Clock
import GHC.Generics
import Network.DigitalOcean.Types
import Network.DigitalOcean.Utils.Pagination
import Network.DigitalOcean.Services.Region
data LoadBalancerAlgorithm =
RoundRobin
| LeastConnections
deriving (Show, Generic)
instance FromJSON LoadBalancerAlgorithm where
parseJSON = genericParseJSON $ aesonPrefix snakeCase
instance ToJSON LoadBalancerAlgorithm where
toJSON = genericToJSON $ aesonPrefix snakeCase
data ForwardingRule = ForwardingRule
{ forwardingrulesEntryProtocol :: String
, forwardingrulesEntryPort :: Int
, forwardingrulesTargetProtocol :: String
, forwardingrulesTargetPort :: Int
, forwardingrulesCertificateId :: Maybe String
, forwardingrulesTlsPassthrough :: Maybe Bool
} deriving (Show, Generic)
instance FromJSON ForwardingRule where
parseJSON = genericParseJSON $ aesonPrefix snakeCase
instance ToJSON ForwardingRule where
toJSON = genericToJSON $ aesonPrefix snakeCase
instance Payload [ForwardingRule]
data HealthCheck = HealthCheck
{ healthcheckProtocol :: String
, healthcheckPort :: Int
, healthcheckPath :: Maybe String
, healthcheckCheckIntervalSeconds :: Maybe Int
, healthcheckResponseTimeoutSeconds :: Maybe Int
, healthcheckUnhealthyThreshold :: Maybe Int
, healthcheckHealthyThreshold :: Maybe Int
} deriving (Show, Generic)
instance FromJSON HealthCheck where
parseJSON = genericParseJSON $ aesonPrefix snakeCase
instance ToJSON HealthCheck where
toJSON = genericToJSON $ aesonPrefix snakeCase
data StickySessions = StickySessions
{ stickysessionsType :: String
, stickysessionsCookieName :: String
, stickysessionsCookieTtlSeconds :: String
} deriving (Show, Generic)
instance FromJSON StickySessions where
parseJSON = genericParseJSON $ aesonPrefix snakeCase
instance ToJSON StickySessions where
toJSON = genericToJSON $ aesonPrefix snakeCase
data LoadBalancer = LoadBalancer
{ loadbalancerId :: String
, loadbalancerName :: String
, loadbalancerIp :: IpAddress
, loadbalancerAlgorithm :: LoadBalancerAlgorithm
, loadbalancerStatus :: String
, loadbalancerCreatedAt :: UTCTime
, loadbalancerForwardingRules :: [ForwardingRule]
, loadbalancerHealthCheck :: HealthCheck
, loadbalancerStickySessions :: StickySessions
, loadbalancerRegion :: Region
, loadbalancerTag :: String
, loadbalancerDropletIds :: [DropletId]
, loadbalancerRedirectHttpToHttps :: Bool
} deriving (Show, Generic)
instance FromJSON LoadBalancer where
parseJSON = genericParseJSON $ aesonPrefix snakeCase
instance ToJSON LoadBalancer where
toJSON = genericToJSON $ aesonPrefix snakeCase
instance FromJSON (Response LoadBalancer) where
parseJSON (Object v) =
fmap Response $ parseJSON =<< (v .: "load_balancer")
instance FromJSON (Response [LoadBalancer]) where
parseJSON (Object v) =
fmap Response $ parseJSON =<< (v .: "load_balancers")
instance FromJSON (PaginationState LoadBalancer) where
parseJSON (Object v) = parsePaginationState v "load_balancers"
instance Paginatable LoadBalancer
data LoadBalancerPayload = LoadBalancerPayload
{ loadbalancerpayloadName :: String
, loadbalancerpayloadAlgorithm :: Maybe String
, loadbalancerpayloadRegion :: String
, loadbalancerpayloadForwardingRules :: [ForwardingRule]
, loadbalancerpayloadHealthCheck :: Maybe HealthCheck
, loadbalancerpayloadStickySessions :: Maybe StickySessions
, loadbalancerpayloadRedirectHttpToHttps :: Maybe Bool
, loadbalancerpayloadDropletIds :: Maybe [Int]
, loadbalancerpayloadTag :: String
} deriving (Show, Generic)
instance ToJSON LoadBalancerPayload where
toJSON = genericToJSON $ aesonPrefix snakeCase
instance Payload LoadBalancerPayload