@@ -1,4 +1,5 @@
11{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DataKinds #-}
23{-# LANGUAGE DefaultSignatures #-}
34{-# LANGUAGE FlexibleContexts #-}
45{-# LANGUAGE FlexibleInstances #-}
@@ -7,8 +8,10 @@
78{-# LANGUAGE PackageImports #-}
89{-# LANGUAGE PolyKinds #-}
910{-# LANGUAGE ScopedTypeVariables #-}
11+{-# LANGUAGE TypeFamilies #-}
1012{-# LANGUAGE TypeOperators #-}
1113{-# LANGUAGE TypeSynonymInstances #-}
14+{-# LANGUAGE UndecidableInstances #-}
1215#include "overlapping-compat.h"
1316module Data.Swagger.Internal.ParamSchema where
1417
@@ -36,6 +39,13 @@ import Data.Swagger.Internal
3639import Data.Swagger.Lens
3740import Data.Swagger.SchemaOptions
3841
42+#if __GLASGOW_HASKELL__ < 800
43+#else
44+import qualified Data.ByteString as BS
45+import qualified Data.ByteString.Lazy as BSL
46+import GHC.TypeLits (TypeError, ErrorMessage(..))
47+#endif
48+
3949-- | Default schema for binary data (any sequence of octets).
4050binaryParamSchema :: ParamSchema t
4151binaryParamSchema = mempty
@@ -189,6 +199,18 @@ instance ToParamSchema T.Text where
189199instance ToParamSchema TL.Text where
190200 toParamSchema _ = toParamSchema (Proxy :: Proxy String)
191201
202+#if __GLASGOW_HASKELL__ < 800
203+#else
204+type family ToParamSchemaByteStringError bs where
205+ ToParamSchemaByteStringError bs = TypeError
206+ ( Text "Impossible to have an instance " :<>: ShowType (ToParamSchema bs) :<>: Text "."
207+ :$$: Text "Please, use a newtype wrapper around " :<>: ShowType bs :<>: Text " instead."
208+ :$$: Text "Consider using byteParamSchema or binaryParamSchema templates." )
209+
210+instance ToParamSchemaByteStringError BS.ByteString => ToParamSchema BS.ByteString where toParamSchema = error "impossible"
211+instance ToParamSchemaByteStringError BSL.ByteString => ToParamSchema BSL.ByteString where toParamSchema = error "impossible"
212+#endif
213+
192214instance ToParamSchema All where toParamSchema _ = toParamSchema (Proxy :: Proxy Bool)
193215instance ToParamSchema Any where toParamSchema _ = toParamSchema (Proxy :: Proxy Bool)
194216instance ToParamSchema a => ToParamSchema (Sum a) where toParamSchema _ = toParamSchema (Proxy :: Proxy a)