module Graphics.Text.Font.Choose.Range(Range(..), iRange) where
import Data.MessagePack (MessagePack(..), Object(..))
import qualified Data.Vector as V
import qualified Data.IntMap as IM
-- | Matches a numeric range.
data Range = Range Double Double deriving (Eq, Show, Ord)
-- | Matches an integral range.
iRange :: Int -> Int -> Range
iRange i j = toEnum i `Range` toEnum j
instance MessagePack Range where
toObject (Range start end) = ObjectMap $ V.fromList [
(ObjectInt 0, ObjectDouble start),
(ObjectInt 1, ObjectDouble end)
]
fromObject msg
| Just msg' <- fromObject msg =
Just (IM.findWithDefault 0 0 msg' `Range` IM.findWithDefault 0 1 msg')
| otherwise = Nothing