-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Servant swagger ui
--   
--   Provide embedded swagger UI for servant and swagger (i.e.
--   servant-swagger)
@package servant-swagger-ui
@version 0.2.5.3.9.1


-- | Originally from waitra package:
--   <a>http://hackage.haskell.org/package/waitra-0.0.4.0/docs/Network-Waitra-Embedded.html</a>
module Servant.Swagger.UI.Internal

-- | Create a <tt>[(<a>FilePath</a>, <a>ByteString</a>)]</tt> list,
--   recursively traversing given directory path.
--   
--   <pre>
--   staticApp $ embeddedSettings $(mkRecursiveEmbedded "static")
--   -- is an in-memory equivalent of
--   staticApp $ defaultFileServerSettings "static"
--   </pre>
mkRecursiveEmbedded :: FilePath -> Q Exp


-- | Provides <tt>SwaggerUI</tt> and corresponding <tt>swaggerUIServer</tt>
--   to embed <a>swagger ui</a> into the application.
--   
--   All of UI files are embedded into the binary.
--   
--   <i>An example:</i>
--   
--   <pre>
--   -- | Actual API.
--   type BasicAPI = Get '[PlainText, JSON] Text
--       :&lt;|&gt; "cat" :&gt; Capture ":name" CatName :&gt; Get '[JSON] Cat
--   
--   -- | API type with bells and whistles, i.e. schema file and swagger-ui.
--   type API = <a>SwaggerSchemaUI</a> "swagger-ui" "swagger.json"
--       :&lt;|&gt; BasicAPI
--   
--   -- | Servant server for an API
--   server :: Server API
--   server = <a>swaggerSchemaUIServer</a> swaggerDoc
--       :&lt;|&gt; (pure "Hello World" :&lt;|&gt; catEndpoint)
--     where
--       catEndpoint name = pure $ Cat name False
--   </pre>
module Servant.Swagger.UI

-- | Swagger schema + ui api.
--   
--   <tt>SwaggerSchemaUI "swagger-ui" "swagger.json"</tt> will result into
--   following hierarchy:
--   
--   <pre>
--   /swagger.json
--   /swagger-ui
--   /swagger-ui/index.html
--   /swagger-ui/...
--   </pre>
type SwaggerSchemaUI (dir :: Symbol) (schema :: Symbol) = SwaggerSchemaUI' dir (schema :> Get '[JSON] Swagger)

-- | Use <a>SwaggerSchemaUI'</a> when you need even more control over where
--   <tt>swagger.json</tt> is served (e.g. subdirectory).
type SwaggerSchemaUI' (dir :: Symbol) (api :: *) = api :<|> (dir :> (Get '[HTML] (SwaggerUiHtml dir api) :<|> (("index.html" :> Get '[HTML] (SwaggerUiHtml dir api)) :<|> Raw)))

-- | Serve Swagger UI on <tt>/dir</tt> using <tt>api</tt> as a Swagger spec
--   source.
--   
--   <pre>
--   swaggerSchemaUIServer :: Swagger -&gt; Server (SwaggerSchemaUI schema dir)
--   </pre>
swaggerSchemaUIServer :: (Server api ~ Handler Swagger) => Swagger -> Server (SwaggerSchemaUI' dir api)

-- | Serve alternative Swagger UI.
--   
--   See <a>https://github.com/jensoleg/swagger-ui</a>
jensolegSwaggerSchemaUIServer :: (Server api ~ Handler Swagger) => Swagger -> Server (SwaggerSchemaUI' dir api)

-- | Index file for swagger ui.
--   
--   It's configured by the location of swagger schema and directory it
--   lives under.
--   
--   Implementation detail: the <tt>index.html</tt> is prepopulated with
--   parameters to find schema file automatically.
data SwaggerUiHtml (dir :: Symbol) (api :: *)
SwaggerUiHtml :: Text -> SwaggerUiHtml
swaggerSchemaUIServerImpl :: (Server api ~ Handler Swagger) => Text -> [(FilePath, ByteString)] -> Swagger -> Server (SwaggerSchemaUI' dir api)
swaggerUiIndexTemplate :: Text
swaggerUiFiles :: [(FilePath, ByteString)]
jensolegIndexTemplate :: Text
jensolegFiles :: [(FilePath, ByteString)]
instance (GHC.TypeLits.KnownSymbol dir, Servant.Utils.Links.HasLink api, Servant.Utils.Links.Link ~ Servant.Utils.Links.MkLink api, Servant.API.TypeLevel.IsElem api api) => Text.Blaze.ToMarkup (Servant.Swagger.UI.SwaggerUiHtml dir api)
