@@ -14,10 +14,13 @@
1414module Data.Swagger.Internal.Schema where
1515
1616import Control.Lens
17+import Data.Data.Lens (template)
18+
1719import Control.Monad
1820import Control.Monad.Writer
1921import Data.Aeson
2022import Data.Char
23+import Data.Data (Data)
2124import Data.HashMap.Strict (HashMap)
2225import qualified Data.HashMap.Strict as HashMap
2326import "unordered-containers" Data.HashSet (HashSet)
@@ -161,6 +164,16 @@ declareSchemaRef proxy = do
161164 return $ Ref (Reference name)
162165 _ -> Inline <$> declareSchema proxy
163166
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+
164177class GToSchema (f :: * -> *) where
165178 gdeclareNamedSchema :: SchemaOptions -> proxy f -> Schema -> Declare Definitions NamedSchema
166179