{-# LANGUAGE OverloadedStrings #-} module Network.Syncthing.Types.CacheEntry ( CacheEntry(..) ) where import Control.Applicative ((<$>), (<*>)) import Control.Monad (MonadPlus (mzero)) import Data.Aeson (FromJSON, Value (..), parseJSON, (.:)) import Data.Text () import Data.Time.Clock (UTCTime) import Network.Syncthing.Internal.Utils (parseAddr, toUTC) import Network.Syncthing.Types.Common (Addr) -- | Represents an entry in the discovery cache. data CacheEntry = CacheEntry { getAddr :: Addr , getSeen :: Maybe UTCTime } deriving (Eq, Show) instance FromJSON CacheEntry where parseJSON (Object v) = CacheEntry <$> (parseAddr <$> (v .: "Address")) <*> (toUTC <$> (v .: "Seen")) parseJSON _ = mzero