{-# LANGUAGE OverloadedStrings #-}

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

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

import           Network.Syncthing.Types.Common   (Device)
import           Network.Syncthing.Types.FileInfo (FileInfo)


-- | Contains data available about a given file.
data DBFile = DBFile {
      getAvailability   :: [Device]
    , getGlobal         :: FileInfo
    , getLocal          :: FileInfo
    } deriving (Eq, Show)

instance FromJSON DBFile where
    parseJSON (Object v) =
        DBFile <$> (v .: "availability")
               <*> (v .: "global")
               <*> (v .: "local")
    parseJSON _          = mzero