@@ -25,8 +25,43 @@ import Data.Swagger.Internal
25import Data.Swagger.Lens
25import Data.Swagger.Lens
26import Data.Swagger.SchemaOptions
26import Data.Swagger.SchemaOptions
28+-- | Convert a type into a plain @'ParamSchema'@.
30+-- An example type and instance:
33+-- {-\# LANGUAGE OverloadedStrings \#-} -- allows to write 'T.Text' literals
35+-- import Control.Lens
37+-- data Direction = Up | Down
39+-- instance ToParamSchema Direction where
40+-- toParamSchema = mempty
41+-- & schemaType .~ SwaggerString
42+-- & schemaEnum .~ [ \"Up\", \"Down\" ]
45+-- Instead of manually writing your @'ToParamSchema'@ instance you can
46+-- use a default generic implementation of @'toParamSchema'@.
48+-- To do that, simply add @deriving 'Generic'@ clause to your datatype
49+-- and declare a @'ToParamSchema'@ instance for your datatype without
50+-- giving definition for @'toParamSchema'@.
52+-- For instance, the previous example can be simplified into this:
55+-- {-\# LANGUAGE DeriveGeneric \#-}
57+-- import GHC.Generics (Generic)
59+-- data Direction = Up | Down deriving Generic
61+-- instance ToParamSchema Direction
28class ToParamSchema a where
63class ToParamSchema a where
29− -- | Convert a type into a non-body parameter schema.
64+ -- | Convert a type into a plain parameter schema.
30 toParamSchema :: proxy a -> ParamSchema t i
65 toParamSchema :: proxy a -> ParamSchema t i
31 default toParamSchema :: (Generic a, GToParamSchema (Rep a)) => proxy a -> ParamSchema t i
66 default toParamSchema :: (Generic a, GToParamSchema (Rep a)) => proxy a -> ParamSchema t i
32 toParamSchema = genericToParamSchema defaultSchemaOptions
67 toParamSchema = genericToParamSchema defaultSchemaOptions
@@ -52,6 +87,7 @@ instance ToParamSchema Word16 where toParamSchema = toParamSchemaBoundedIntegral
52instance ToParamSchema Word32 where toParamSchema = toParamSchemaBoundedIntegral
87instance ToParamSchema Word32 where toParamSchema = toParamSchemaBoundedIntegral
53instance ToParamSchema Word64 where toParamSchema = toParamSchemaBoundedIntegral
88instance ToParamSchema Word64 where toParamSchema = toParamSchemaBoundedIntegral
90+-- | Default plain schema for @'Bounded'@, @'Integral'@ types.
55toParamSchemaBoundedIntegral :: forall proxy a t i. (Bounded a, Integral a) => proxy a -> ParamSchema t i
91toParamSchemaBoundedIntegral :: forall proxy a t i. (Bounded a, Integral a) => proxy a -> ParamSchema t i
56toParamSchemaBoundedIntegral _ = mempty
92toParamSchemaBoundedIntegral _ = mempty
57 & schemaType .~ SwaggerInteger
93 & schemaType .~ SwaggerInteger
@@ -120,6 +156,7 @@ instance ToParamSchema a => ToParamSchema (First a) where toParamSchema _ = to
120instance ToParamSchema a => ToParamSchema (Last a) where toParamSchema _ = toParamSchema (Proxy :: Proxy a)
156instance ToParamSchema a => ToParamSchema (Last a) where toParamSchema _ = toParamSchema (Proxy :: Proxy a)
121instance ToParamSchema a => ToParamSchema (Dual a) where toParamSchema _ = toParamSchema (Proxy :: Proxy a)
157instance ToParamSchema a => ToParamSchema (Dual a) where toParamSchema _ = toParamSchema (Proxy :: Proxy a)
159+-- | A configurable generic @'ParamSchema'@ creator.
123genericToParamSchema :: forall proxy a t i. (Generic a, GToParamSchema (Rep a)) => SchemaOptions -> proxy a -> ParamSchema t i
160genericToParamSchema :: forall proxy a t i. (Generic a, GToParamSchema (Rep a)) => SchemaOptions -> proxy a -> ParamSchema t i
124genericToParamSchema opts _ = gtoParamSchema opts (Proxy :: Proxy (Rep a)) mempty
161genericToParamSchema opts _ = gtoParamSchema opts (Proxy :: Proxy (Rep a)) mempty