module Network.Syncthing.Types.FileInfo
( FileInfo(..)
) where
import Control.Applicative ((<$>), (<*>))
import Control.Monad (MonadPlus (mzero))
import Data.Aeson (FromJSON, Value (..),
parseJSON, (.:), (.:?))
import Data.Text (Text)
import Data.Time.Clock (UTCTime)
import Network.Syncthing.Internal.Utils (toUTC)
data FileInfo = FileInfo {
getName :: Text
, getFlags :: Text
, getModified :: Maybe UTCTime
, getFileVersion :: [Text]
, getLocalVersion :: Int
, getSize :: Integer
, getNumBlocks :: Maybe Int
} deriving (Eq, Show)
instance FromJSON FileInfo where
parseJSON (Object v) =
FileInfo <$> (v .: "name")
<*> (v .: "flags")
<*> (toUTC <$> (v .: "modified"))
<*> (v .: "version")
<*> (v .: "localVersion")
<*> (v .: "size")
<*> (v .:? "numBlocks")
parseJSON _ = mzero