{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE DeriveGeneric #-}

module Network.DigitalOcean.Services.Size where

-----------------------------------------------------------------
import        Data.Aeson
import        Data.Aeson.Casing
import        GHC.Generics
-----------------------------------------------------------------
import        Network.DigitalOcean.Types
-----------------------------------------------------------------

data Size = Size
  { sizeSlug         :: String
  , sizeAvailable    :: Bool
  , sizeTransfer     :: Double
  , sizePriceMonthly :: Double
  , sizePriceHourly  :: Double
  , sizeMemory       :: Int
  , sizeVcpus        :: Int
  , sizeDisk         :: Int
  -- , sizeRegions      :: [String]
  } deriving (Show, Generic)

instance FromJSON (Response [Size]) where
  parseJSON (Object v) =
    fmap Response $ parseJSON =<< (v .: "sizes")

instance FromJSON Size where
  parseJSON = genericParseJSON $ aesonPrefix snakeCase