git.iko.soy/typeable/openapi3
on master help sign in
Add Data-generic inlineSchemas helper
40953e0Nickolay Kudasov
src/Data/Swagger/Internal/Schema.hs+13
@@ -14,10 +14,13 @@
14module Data.Swagger.Internal.Schema where
14module Data.Swagger.Internal.Schema where
15
15
16import Control.Lens
16import Control.Lens
17+import Data.Data.Lens (template)
18+
17import Control.Monad
19import Control.Monad
18import Control.Monad.Writer
20import Control.Monad.Writer
19import Data.Aeson
21import Data.Aeson
20import Data.Char
22import Data.Char
23+import Data.Data (Data)
21import Data.HashMap.Strict (HashMap)
24import Data.HashMap.Strict (HashMap)
22import qualified Data.HashMap.Strict as HashMap
25import qualified Data.HashMap.Strict as HashMap
23import "unordered-containers" Data.HashSet (HashSet)
26import "unordered-containers" Data.HashSet (HashSet)
@@ -161,6 +164,16 @@ declareSchemaRef proxy = do
161 return $ Ref (Reference name)
164 return $ Ref (Reference name)
162 _ -> Inline <$> declareSchema proxy
165 _ -> Inline <$> declareSchema proxy
163
166
167+inlineSchemas :: Data s => [T.Text] -> Definitions -> s -> s
168+inlineSchemas names defs = template %~ deref
169+ where
170+ deref r@(Ref (Reference name))
171+ | name `elem` names =
172+ case HashMap.lookup name defs of
173+ Just schema -> Inline (inlineSchemas names defs schema)
174+ Nothing -> r
175+ deref r = r
176+
164class GToSchema (f :: * -> *) where
177class GToSchema (f :: * -> *) where
165 gdeclareNamedSchema :: SchemaOptions -> proxy f -> Schema -> Declare Definitions NamedSchema
178 gdeclareNamedSchema :: SchemaOptions -> proxy f -> Schema -> Declare Definitions NamedSchema
166
179