{-# LANGUAGE OverloadedStrings #-} module Leankit.Types.Common where import Control.Applicative ((<$>)) import Data.Aeson.Types import Data.Colour import Data.Colour.SRGB type Date = String type DateTime = String -- TODO use some template haskell magic to generate these stuff newtype BoardID = BoardID Int deriving (Eq, Show) instance FromJSON BoardID where parseJSON v = BoardID <$> parseJSON v newtype OrganizationID = OrganizationID Int deriving (Eq, Show) instance FromJSON OrganizationID where parseJSON v = OrganizationID <$> parseJSON v newtype UserID = UserID Int deriving (Eq, Show) instance FromJSON UserID where parseJSON v = UserID <$> parseJSON v newtype LaneID = LaneID Int deriving (Eq, Show) instance FromJSON LaneID where parseJSON v = LaneID <$> parseJSON v newtype CardID = CardID Int deriving (Eq, Show) instance FromJSON CardID where parseJSON v = CardID <$> parseJSON v newtype CardContextID = CardContextID Int deriving (Eq, Show) instance FromJSON CardContextID where parseJSON v = CardContextID <$> parseJSON v newtype CardCommentID = CardCommentID Int deriving (Eq, Show) instance FromJSON CardCommentID where parseJSON v = CardCommentID <$> parseJSON v newtype CardTypeID = CardTypeID Int deriving (Eq, Show) instance FromJSON CardTypeID where parseJSON v = CardTypeID <$> parseJSON v newtype Color = Color (Colour Double) deriving (Eq, Show) instance FromJSON Color where parseJSON (String "") = parseJSON (String "#FFFFFF") parseJSON v = (Color . sRGB24read) <$> parseJSON v -- TODO clumsy... Empty string should be Nothing at the end of the day newtype LaneClassTypeID = LaneClassTypeID Int deriving (Eq, Show) instance FromJSON LaneClassTypeID where parseJSON v = LaneClassTypeID <$> parseJSON v newtype LaneTypeID = LaneTypeID Int deriving (Eq, Show) instance FromJSON LaneTypeID where parseJSON v = LaneTypeID <$> parseJSON v newtype PriorityID = PriorityID Int deriving (Eq, Show) instance FromJSON PriorityID where parseJSON v = PriorityID <$> parseJSON v newtype ClassOfServiceID = ClassOfServiceID Int deriving (Eq, Show) instance FromJSON ClassOfServiceID where parseJSON v = ClassOfServiceID <$> parseJSON v