module Network.RTorrent.Priority (
TorrentPriority (..)
, FilePriority (..)
) where
import Control.DeepSeq
import Network.XmlRpc.Internals
data TorrentPriority =
TorrentPriorityOff
| TorrentPriorityLow
| TorrentPriorityNormal
| TorrentPriorityHigh
deriving (Show, Eq, Ord)
instance NFData TorrentPriority
instance Enum TorrentPriority where
toEnum 0 = TorrentPriorityOff
toEnum 1 = TorrentPriorityLow
toEnum 2 = TorrentPriorityNormal
toEnum 3 = TorrentPriorityHigh
toEnum i = error $ "toEnum :: Int -> TorrentPriority failed, got : " ++ show i
fromEnum TorrentPriorityOff = 0
fromEnum TorrentPriorityLow = 1
fromEnum TorrentPriorityNormal = 2
fromEnum TorrentPriorityHigh = 3
instance XmlRpcType TorrentPriority where
toValue = toValue . fromEnum
fromValue v = return . toEnum =<< check =<< fromValue v
where
check i
| 0 <= i && i <= 3 = return i
| otherwise = fail $ "Invalid TorrentPriority, got : " ++ show i
getType _ = TInt
data FilePriority =
FilePriorityOff
| FilePriorityNormal
| FilePriorityHigh
deriving (Show, Eq, Ord)
instance NFData FilePriority
instance Enum FilePriority where
toEnum 0 = FilePriorityOff
toEnum 1 = FilePriorityNormal
toEnum 2 = FilePriorityHigh
toEnum i = error $ "toEnum :: Int -> FilePriority failed, got : " ++ show i
fromEnum FilePriorityOff = 0
fromEnum FilePriorityNormal = 1
fromEnum FilePriorityHigh = 2
instance XmlRpcType FilePriority where
toValue = toValue . fromEnum
fromValue v = return . toEnum =<< check =<< fromValue v
where
check i
| 0 <= i && i <= 2 = return i
| otherwise = fail $ "Invalid FilePriority, got : " ++ show i
getType _ = TInt