@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# OPTIONS_GHC -Wno-orphans #-}
23
34module Deriving.OpenApi
@@ -15,13 +16,28 @@ import Data.Kind
1516import Data.OpenApi
1617import Data.OpenApi.Internal.Schema
1718import Data.Proxy
18−import Data.Text (Text)
19−import qualified Data.Text as T
2019import Data.Typeable
2120import Deriving.Aeson
2221import GHC.Generics
2322import GHC.TypeLits
23+
24+#ifdef SERVANT_DESCRIPTION
25+
2426import Servant.API
27+import Data.Text (Text)
28+import qualified Data.Text as T
29+
30+instance (AesonOptions xs) => AesonOptions (Description f ': xs) where
31+ aesonOptions = aesonOptions @xs
32+
33+instance (OpenApiOptions xs, KnownSymbol t) => OpenApiOptions (Description t ': xs) where
34+ openApiOptions = openApiOptions @xs
35+ openApiSchemaModifier = schema . description <>~ Just (toTextLine @t)
36+
37+toTextLine :: forall s. KnownSymbol s => Text
38+toTextLine = "\n\n" <> T.pack (symbolVal (Proxy @s))
39+
40+#endif
2541
2642type CustomOpenApi = CustomJSON
2743
@@ -37,16 +53,6 @@ instance (StringModifier f, OpenApiOptions xs) => OpenApiOptions (DatatypeNameMo
3753instance (AesonOptions xs) => AesonOptions (DatatypeNameModifier f ': xs) where
3854 aesonOptions = aesonOptions @xs
3955
40−instance (AesonOptions xs) => AesonOptions (Description f ': xs) where
41− aesonOptions = aesonOptions @xs
42−
43−instance (OpenApiOptions xs, KnownSymbol t) => OpenApiOptions (Description t ': xs) where
44− openApiOptions = openApiOptions @xs
45− openApiSchemaModifier = schema . description <>~ Just (toTextLine @t)
46−
47−toTextLine :: forall s. KnownSymbol s => Text
48−toTextLine = "\n\n" <> T.pack (symbolVal (Proxy @s))
49−
5056type family (++) (x :: [k]) (y :: [k]) :: [k] where
5157 (++) '[] ys = ys
5258 (++) (x ': xs) ys = xs ++ (x ': ys)