webgear-openapi-1.2.0: src/WebGear/OpenApi/Trait/Cookie.hs
{-# OPTIONS_GHC -Wno-orphans #-}
-- | OpenApi implementation of 'WG.Cookie' and 'WG.SetCookie' traits.
module WebGear.OpenApi.Trait.Cookie () where
import Data.OpenApi hiding (Response)
import Data.Proxy (Proxy (Proxy))
import Data.String (fromString)
import Data.Text (Text)
import GHC.TypeLits (KnownSymbol, symbolVal)
import WebGear.Core.Request (Request)
import WebGear.Core.Response (Response)
import WebGear.Core.Trait (Get (..), Set (..), Trait, TraitAbsence)
import qualified WebGear.Core.Trait.Cookie as WG
import WebGear.OpenApi.Handler (DocNode (..), OpenApiHandler (..), nullNode, singletonNode)
instance (KnownSymbol name, TraitAbsence (WG.Cookie e name val) Request) => Get (OpenApiHandler m) (WG.Cookie e name val) Request where
{-# INLINE getTrait #-}
getTrait WG.Cookie =
OpenApiHandler $ singletonNode $ DocSecurityScheme cookieName securityScheme
where
cookieName = fromString @Text $ symbolVal $ Proxy @name
securityScheme :: SecurityScheme
securityScheme =
SecurityScheme
{ _securitySchemeType =
SecuritySchemeApiKey
ApiKeyParams
{ _apiKeyName = cookieName
, _apiKeyIn = ApiKeyCookie
}
, _securitySchemeDescription = Nothing
}
-- Response cookie information is not captured by OpenAPI
instance (Trait (WG.SetCookie e name) Response) => Set (OpenApiHandler m) (WG.SetCookie e name) Response where
{-# INLINE setTrait #-}
setTrait WG.SetCookie _ = OpenApiHandler nullNode