servant-swagger-1.0.2: Generate Swagger specification for your servant API.

Safe HaskellNone
LanguageHaskell2010

Servant.Swagger.Internal.TypeLevel.API

Synopsis

Documentation

type family EndpointsList api Source

Build a list of endpoints from an API.

type family IsSubAPI sub api :: Constraint Source

Check whether sub is a sub API of api.

Equations

IsSubAPI sub api = AllIsElem (EndpointsList sub) api 

type family AllIsElem xs api :: Constraint Source

Check that every element of xs is an endpoint of api.

Equations

AllIsElem `[]` api = () 
AllIsElem (x : xs) api = (IsIn x api, AllIsElem xs api) 

type family MapSub e xs Source

Apply (e :>) to every API in xs.

Equations

MapSub e `[]` = `[]` 
MapSub e (x : xs) = (e :> x) : MapSub e xs 

type family AppendList xs ys Source

Append two type-level lists.

Equations

AppendList `[]` ys = ys 
AppendList (x : xs) ys = x : AppendList xs ys 

type family Or a b :: Constraint Source

Equations

Or () b = () 
Or a () = () 

type family IsIn sub api :: Constraint Source

Equations

IsIn e (a :<|> b) = Or (IsIn e a) (IsIn e b) 
IsIn (e :> a) (e :> b) = IsIn a b 
IsIn e e = () 

type family Elem x xs Source

Check whether a type is a member of a list of types. This is a type-level analogue of elem.

Equations

Elem x `[]` = False 
Elem x (x : xs) = True 
Elem x (y : xs) = Elem x xs 

type AddBodyType c cs a as = If (Elem c cs) (Insert a as) as Source

AddBodyType c cs a as adds type a to the list as only if c is in cs and a is not in as. This allows to build a list of unique body types.

type Insert x xs = If (Elem x xs) xs (x : xs) Source

Insert type x into a type list xs only if it is not already there.

type family Merge xs ys Source

Merge two lists, ignoring any type in xs which occurs also in ys.

Equations

Merge `[]` ys = ys 
Merge (x : xs) ys = If (Elem x ys) (Merge xs ys) (x : Merge xs ys) 

type family BodyTypes c api :: [*] Source

Extract a list of unique "body" types for a specific content-type from a servant API.

Equations

BodyTypes c (Delete cs (Headers hdrs a)) = AddBodyType c cs a `[]` 
BodyTypes c (Get cs (Headers hdrs a)) = AddBodyType c cs a `[]` 
BodyTypes c (Patch cs (Headers hdrs a)) = AddBodyType c cs a `[]` 
BodyTypes c (Post cs (Headers hdrs a)) = AddBodyType c cs a `[]` 
BodyTypes c (Put cs (Headers hdrs a)) = AddBodyType c cs a `[]` 
BodyTypes c (Delete cs a) = AddBodyType c cs a `[]` 
BodyTypes c (Get cs a) = AddBodyType c cs a `[]` 
BodyTypes c (Patch cs a) = AddBodyType c cs a `[]` 
BodyTypes c (Post cs a) = AddBodyType c cs a `[]` 
BodyTypes c (Put cs a) = AddBodyType c cs a `[]` 
BodyTypes c (ReqBody cs a :> api) = AddBodyType c cs a (BodyTypes c api) 
BodyTypes c (e :> api) = BodyTypes c api 
BodyTypes c (a :<|> b) = Merge (BodyTypes c a) (BodyTypes c b) 
BodyTypes c api = `[]`