{-# LANGUAGE OverloadedStrings #-}

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

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

import           Network.Syncthing.Types.FileInfo (FileInfo)


-- | Contains lists of files which are needed by a device for becoming in
-- sync.
data Need = Need {
      getProgress :: [FileInfo]
    , getQueued   :: [FileInfo]
    , getRest     :: [FileInfo]
    } deriving (Eq, Show)

instance FromJSON Need where
    parseJSON (Object v) =
        Need <$> (v .: "progress")
             <*> (v .: "queued")
             <*> (v .: "rest")
    parseJSON _          = mzero