module Network.Syncthing.Types.Connection
( Connection(..)
, Connections(..)
) where
import Control.Applicative ((<$>), (<*>))
import Control.Monad (MonadPlus (mzero))
import Data.Aeson (FromJSON, Value (..), parseJSON, (.:))
import qualified Data.Map as M
import Data.Text (Text)
import Data.Time.Clock (UTCTime)
import Network.Syncthing.Types.Common (Addr, Device)
import Network.Syncthing.Internal.Utils (parseAddr, toUTC)
data Connection = Connection {
getAt :: Maybe UTCTime
, getInBytesTotal :: Integer
, getOutBytesTotal :: Integer
, getAddress :: Addr
, getClientVersion :: Text
} deriving (Eq, Show)
instance FromJSON Connection where
parseJSON (Object v) =
Connection <$> (toUTC <$> (v .: "at"))
<*> (v .: "inBytesTotal")
<*> (v .: "outBytesTotal")
<*> (parseAddr <$> (v .: "address"))
<*> (v .: "clientVersion")
parseJSON _ = mzero
data Connections = Connections {
getConnections :: M.Map Device Connection
, getTotal :: Connection
} deriving (Eq, Show)
instance FromJSON Connections where
parseJSON (Object v) =
Connections <$> (v .: "connections")
<*> (v .: "total")
parseJSON _ = mzero