module Stratosphere.ResourceProperties
  ( ResourceProperties(..)
  , ToResourceProperties(..)
  , resourcePropertiesJSON
  )
where

import Stratosphere.Prelude

import qualified Data.Aeson       as JSON
import qualified Data.Aeson.Types as JSON

data ResourceProperties
  = ResourceProperties
  { ResourceProperties -> Text
awsType      :: Text
  , ResourceProperties -> Object
properties   :: JSON.Object
  , ResourceProperties -> Bool
supportsTags :: Bool
  }
  deriving (Int -> ResourceProperties -> ShowS
[ResourceProperties] -> ShowS
ResourceProperties -> String
(Int -> ResourceProperties -> ShowS)
-> (ResourceProperties -> String)
-> ([ResourceProperties] -> ShowS)
-> Show ResourceProperties
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ResourceProperties -> ShowS
showsPrec :: Int -> ResourceProperties -> ShowS
$cshow :: ResourceProperties -> String
show :: ResourceProperties -> String
$cshowList :: [ResourceProperties] -> ShowS
showList :: [ResourceProperties] -> ShowS
Show, ResourceProperties -> ResourceProperties -> Bool
(ResourceProperties -> ResourceProperties -> Bool)
-> (ResourceProperties -> ResourceProperties -> Bool)
-> Eq ResourceProperties
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ResourceProperties -> ResourceProperties -> Bool
== :: ResourceProperties -> ResourceProperties -> Bool
$c/= :: ResourceProperties -> ResourceProperties -> Bool
/= :: ResourceProperties -> ResourceProperties -> Bool
Eq)

class ToResourceProperties a where
  toResourceProperties :: a -> ResourceProperties

resourcePropertiesJSON :: ResourceProperties -> [JSON.Pair]
resourcePropertiesJSON :: ResourceProperties -> [Pair]
resourcePropertiesJSON ResourceProperties{Bool
Object
Text
awsType :: ResourceProperties -> Text
properties :: ResourceProperties -> Object
supportsTags :: ResourceProperties -> Bool
awsType :: Text
properties :: Object
supportsTags :: Bool
..} =
  [ Key
"Type"       Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
awsType
  , Key
"Properties" Key -> Object -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Object
properties
  ]