{-# LANGUAGE OverloadedStrings #-}
module Network.Algolia.Vault where

import Data.Aeson
import Data.Aeson.IP
import Data.IP
import Data.Text (Text)
import Data.Time

data Source = Source
  { sourceIPRange :: IPRange
  , sourceDescription :: Maybe Text
  }


instance ToJSON Source where
  toJSON src = object $ case sourceDescription src of
    Nothing -> ["source" .= sourceIPRange src ]
    Just desc -> ["source" .= sourceIPRange src, "description" .= desc]

instance FromJSON Source where
  parseJSON = withObject "Source" $ \o ->
    Source <$>
    o .: "source" <*>
    o .:? "description"

-- listAllowedSources

-- replaceAllowedSources

-- appendAllowedSource

-- deleteAllowedSource
-- "deletedAt" :: UTCTime