module Chat.Flowdock.REST.Internal
( ApiUrl(..)
, Identifier(..)
, mkIdentifier
, getIdentifier
, ParamName(..)
, mkParamName
, getParamName
) where
import Control.Applicative
import Control.DeepSeq
import Data.Aeson
import Data.Binary.Orphans
import Data.Binary.Tagged
import Data.Hashable
import Data.Proxy
import Text.PrettyPrint.ANSI.Leijen.AnsiPretty
newtype ApiUrl res = ApiUrl String
deriving (Eq, Ord, Show)
instance NFData (ApiUrl res) where
rnf (ApiUrl url) = rnf url
instance Hashable (ApiUrl res) where
hashWithSalt salt (ApiUrl url) = hashWithSalt salt url
instance Binary (ApiUrl res) where
put (ApiUrl url) = put url
get = ApiUrl <$> get
instance FromJSON (ApiUrl res) where
parseJSON v = ApiUrl <$> parseJSON v
instance AnsiPretty (ApiUrl res) where
ansiPretty (ApiUrl url) = ansiPretty url
instance HasStructuralInfo (ApiUrl res) where
structuralInfo _ = NominalNewtype "ApiUrl" $ structuralInfo (Proxy :: Proxy String)
instance HasSemanticVersion (ApiUrl res)
newtype Identifier a res = Identifier a
deriving (Eq, Ord, Show)
instance NFData a => NFData (Identifier a res) where
rnf (Identifier x) = rnf x
instance Hashable a => Hashable (Identifier a res) where
hashWithSalt salt (Identifier x) = hashWithSalt salt x
instance Binary a => Binary (Identifier a res) where
put (Identifier x) = put x
get = Identifier <$> get
instance HasStructuralInfo a => HasStructuralInfo (Identifier a res) where
structuralInfo _ = NominalNewtype "Identifier" $ structuralInfo (Proxy :: Proxy a)
instance HasSemanticVersion (Identifier a res)
instance FromJSON a => FromJSON (Identifier a res) where
parseJSON v = Identifier <$> parseJSON v
instance AnsiPretty a => AnsiPretty (Identifier a res) where
ansiPretty (Identifier a) = ansiPretty a
mkIdentifier :: a -> Identifier a res
mkIdentifier = Identifier
getIdentifier :: Identifier a res -> a
getIdentifier (Identifier x) = x
newtype ParamName res = ParamName String
deriving (Eq, Ord, Show)
mkParamName :: String -> ParamName res
mkParamName = ParamName
getParamName :: ParamName res -> String
getParamName (ParamName param) = param
instance NFData (ParamName res) where
rnf (ParamName param) = rnf param
instance Hashable (ParamName res) where
hashWithSalt salt (ParamName param) = hashWithSalt salt param
instance Binary (ParamName res) where
put (ParamName param) = put param
get = ParamName <$> get
instance FromJSON (ParamName res) where
parseJSON v = ParamName <$> parseJSON v
instance AnsiPretty (ParamName res) where
ansiPretty (ParamName param) = ansiPretty param
instance HasStructuralInfo (ParamName res) where
structuralInfo _ = NominalNewtype "ParamName" $ structuralInfo (Proxy :: Proxy String)
instance HasSemanticVersion (ParamName res)