{-# LANGUAGE DeriveAnyClass #-} module Cloudy.InstanceSetup.Types where import Control.DeepSeq (NFData) import Data.Aeson (FromJSON(..), ToJSON (..), object, (.=), FromJSON, withObject, (.:)) import Data.Text (Text) import GHC.Generics (Generic) data InstanceSetup = InstanceSetup { InstanceSetup -> Text name :: Text , InstanceSetup -> InstanceSetupData instanceSetupData :: InstanceSetupData , InstanceSetup -> Text rawInstanceSetupData :: Text } deriving stock (InstanceSetup -> InstanceSetup -> Bool (InstanceSetup -> InstanceSetup -> Bool) -> (InstanceSetup -> InstanceSetup -> Bool) -> Eq InstanceSetup forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: InstanceSetup -> InstanceSetup -> Bool == :: InstanceSetup -> InstanceSetup -> Bool $c/= :: InstanceSetup -> InstanceSetup -> Bool /= :: InstanceSetup -> InstanceSetup -> Bool Eq, (forall x. InstanceSetup -> Rep InstanceSetup x) -> (forall x. Rep InstanceSetup x -> InstanceSetup) -> Generic InstanceSetup forall x. Rep InstanceSetup x -> InstanceSetup forall x. InstanceSetup -> Rep InstanceSetup x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. InstanceSetup -> Rep InstanceSetup x from :: forall x. InstanceSetup -> Rep InstanceSetup x $cto :: forall x. Rep InstanceSetup x -> InstanceSetup to :: forall x. Rep InstanceSetup x -> InstanceSetup Generic, Int -> InstanceSetup -> ShowS [InstanceSetup] -> ShowS InstanceSetup -> String (Int -> InstanceSetup -> ShowS) -> (InstanceSetup -> String) -> ([InstanceSetup] -> ShowS) -> Show InstanceSetup forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> InstanceSetup -> ShowS showsPrec :: Int -> InstanceSetup -> ShowS $cshow :: InstanceSetup -> String show :: InstanceSetup -> String $cshowList :: [InstanceSetup] -> ShowS showList :: [InstanceSetup] -> ShowS Show) deriving anyclass (InstanceSetup -> () (InstanceSetup -> ()) -> NFData InstanceSetup forall a. (a -> ()) -> NFData a $crnf :: InstanceSetup -> () rnf :: InstanceSetup -> () NFData) instance ToJSON InstanceSetup where toJSON :: InstanceSetup -> Value toJSON InstanceSetup{Text $sel:name:InstanceSetup :: InstanceSetup -> Text name :: Text name, InstanceSetupData $sel:instanceSetupData:InstanceSetup :: InstanceSetup -> InstanceSetupData instanceSetupData :: InstanceSetupData instanceSetupData, Text $sel:rawInstanceSetupData:InstanceSetup :: InstanceSetup -> Text rawInstanceSetupData :: Text rawInstanceSetupData} = [Pair] -> Value object [ Key "name" Key -> Text -> Pair forall v. ToJSON v => Key -> v -> Pair forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv .= Text name , Key "data" Key -> InstanceSetupData -> Pair forall v. ToJSON v => Key -> v -> Pair forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv .= InstanceSetupData instanceSetupData , Key "raw" Key -> Text -> Pair forall v. ToJSON v => Key -> v -> Pair forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv .= Text rawInstanceSetupData ] instance FromJSON InstanceSetup where parseJSON :: Value -> Parser InstanceSetup parseJSON = String -> (Object -> Parser InstanceSetup) -> Value -> Parser InstanceSetup forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "InstanceSetup" ((Object -> Parser InstanceSetup) -> Value -> Parser InstanceSetup) -> (Object -> Parser InstanceSetup) -> Value -> Parser InstanceSetup forall a b. (a -> b) -> a -> b $ \Object o -> do Text name <- Object o Object -> Key -> Parser Text forall a. FromJSON a => Object -> Key -> Parser a .: Key "name" InstanceSetupData instanceSetupData <- Object o Object -> Key -> Parser InstanceSetupData forall a. FromJSON a => Object -> Key -> Parser a .: Key "data" Text rawInstanceSetupData <- Object o Object -> Key -> Parser Text forall a. FromJSON a => Object -> Key -> Parser a .: Key "raw" InstanceSetup -> Parser InstanceSetup forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure InstanceSetup { Text $sel:name:InstanceSetup :: Text name :: Text name, InstanceSetupData $sel:instanceSetupData:InstanceSetup :: InstanceSetupData instanceSetupData :: InstanceSetupData instanceSetupData, Text $sel:rawInstanceSetupData:InstanceSetup :: Text rawInstanceSetupData :: Text rawInstanceSetupData } data InstanceSetupData = InstanceSetupData { InstanceSetupData -> Text shortDescription :: Text , InstanceSetupData -> Text cloudInitUserData :: Text } deriving stock (InstanceSetupData -> InstanceSetupData -> Bool (InstanceSetupData -> InstanceSetupData -> Bool) -> (InstanceSetupData -> InstanceSetupData -> Bool) -> Eq InstanceSetupData forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: InstanceSetupData -> InstanceSetupData -> Bool == :: InstanceSetupData -> InstanceSetupData -> Bool $c/= :: InstanceSetupData -> InstanceSetupData -> Bool /= :: InstanceSetupData -> InstanceSetupData -> Bool Eq, (forall x. InstanceSetupData -> Rep InstanceSetupData x) -> (forall x. Rep InstanceSetupData x -> InstanceSetupData) -> Generic InstanceSetupData forall x. Rep InstanceSetupData x -> InstanceSetupData forall x. InstanceSetupData -> Rep InstanceSetupData x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. InstanceSetupData -> Rep InstanceSetupData x from :: forall x. InstanceSetupData -> Rep InstanceSetupData x $cto :: forall x. Rep InstanceSetupData x -> InstanceSetupData to :: forall x. Rep InstanceSetupData x -> InstanceSetupData Generic, Int -> InstanceSetupData -> ShowS [InstanceSetupData] -> ShowS InstanceSetupData -> String (Int -> InstanceSetupData -> ShowS) -> (InstanceSetupData -> String) -> ([InstanceSetupData] -> ShowS) -> Show InstanceSetupData forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> InstanceSetupData -> ShowS showsPrec :: Int -> InstanceSetupData -> ShowS $cshow :: InstanceSetupData -> String show :: InstanceSetupData -> String $cshowList :: [InstanceSetupData] -> ShowS showList :: [InstanceSetupData] -> ShowS Show) deriving anyclass (InstanceSetupData -> () (InstanceSetupData -> ()) -> NFData InstanceSetupData forall a. (a -> ()) -> NFData a $crnf :: InstanceSetupData -> () rnf :: InstanceSetupData -> () NFData) instance ToJSON InstanceSetupData where toJSON :: InstanceSetupData -> Value toJSON InstanceSetupData{Text $sel:shortDescription:InstanceSetupData :: InstanceSetupData -> Text shortDescription :: Text shortDescription, Text $sel:cloudInitUserData:InstanceSetupData :: InstanceSetupData -> Text cloudInitUserData :: Text cloudInitUserData} = [Pair] -> Value object [ Key "short-description" Key -> Text -> Pair forall v. ToJSON v => Key -> v -> Pair forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv .= Text shortDescription , Key "cloud-init-user-data" Key -> Text -> Pair forall v. ToJSON v => Key -> v -> Pair forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv .= Text cloudInitUserData ] instance FromJSON InstanceSetupData where parseJSON :: Value -> Parser InstanceSetupData parseJSON = String -> (Object -> Parser InstanceSetupData) -> Value -> Parser InstanceSetupData forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "InstanceSetupData" ((Object -> Parser InstanceSetupData) -> Value -> Parser InstanceSetupData) -> (Object -> Parser InstanceSetupData) -> Value -> Parser InstanceSetupData forall a b. (a -> b) -> a -> b $ \Object o -> do Text shortDescription <- Object o Object -> Key -> Parser Text forall a. FromJSON a => Object -> Key -> Parser a .: Key "short-description" Text cloudInitUserData <- Object o Object -> Key -> Parser Text forall a. FromJSON a => Object -> Key -> Parser a .: Key "cloud-init-user-data" InstanceSetupData -> Parser InstanceSetupData forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure InstanceSetupData { Text $sel:shortDescription:InstanceSetupData :: Text shortDescription :: Text shortDescription, Text $sel:cloudInitUserData:InstanceSetupData :: Text cloudInitUserData :: Text cloudInitUserData }