{-# LANGUAGE OverloadedStrings #-}

module Network.Syncthing.Types.Upgrade
    ( Upgrade(..)
    ) where

import           Control.Applicative              ((<$>), (<*>))
import           Control.Monad                    (MonadPlus (mzero))
import           Data.Aeson                       (FromJSON, Value (..), parseJSON, (.:))
import           Data.Text                        (Text)


-- | Information about the current software version and upgrade possibilities.
data Upgrade = Upgrade {
      getLatest  :: Text
    , getNewer   :: Bool
    , getRunning :: Text
    } deriving (Eq, Show)

instance FromJSON Upgrade where
    parseJSON (Object v) =
        Upgrade <$> (v .: "latest")
                <*> (v .: "newer")
                <*> (v .: "running")
    parseJSON _          = mzero