| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Servant.Swagger.Internal.TypeLevel.API
- type family EndpointsList api
- type family IsSubAPI sub api :: Constraint
- type family AllIsElem xs api :: Constraint
- type family MapSub e xs
- type family AppendList xs ys
- type family Or a b :: Constraint
- type family IsIn sub api :: Constraint
- type family Elem x xs
- type AddBodyType c cs a as = If (Elem c cs) (Insert a as) as
- type Insert x xs = If (Elem x xs) xs (x : xs)
- type family Merge xs ys
- type family BodyTypes c api :: [*]
Documentation
type family EndpointsList api Source
Build a list of endpoints from an API.
Equations
| EndpointsList (a :<|> b) = AppendList (EndpointsList a) (EndpointsList b) | |
| EndpointsList (e :> a) = MapSub e (EndpointsList a) | |
| EndpointsList a = `[a]` |
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.
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
type family IsIn sub api :: Constraint Source
Check whether a type is a member of a list of types.
This is a type-level analogue of .elem
type AddBodyType c cs a as = If (Elem c cs) (Insert a as) as Source
adds type AddBodyType c cs a asa 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 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 = `[]` |