{-# LANGUAGE GeneralizedNewtypeDeriving, NoDeriveAnyClass #-} -- | Typesafe identifiers for our various objects module Thermoprint.Identifiers ( PrinterId(..) , JobId(..) , DraftId(..) , castId ) where import Servant.API (ToText, FromText) import Data.Aeson (FromJSON, ToJSON) newtype PrinterId = PrinterId Integer deriving (Show, Eq, Ord, Num, Real, Integral, Enum, FromText, ToText, FromJSON, ToJSON) newtype JobId = JobId Integer deriving (Show, Eq, Ord, Num, Real, Integral, Enum, FromText, ToText, FromJSON, ToJSON) newtype DraftId = DraftId Integer deriving (Show, Eq, Ord, Num, Real, Integral, Enum, FromText, ToText, FromJSON, ToJSON) castId :: (Integral a, Enum b) => a -> b castId = toEnum . fromInteger . toInteger