servant-hateoas-0.1.1: HATEOAS extension for servant
Safe HaskellSafe-Inferred
LanguageGHC2021

Servant.Hateoas.Resource

Synopsis

Resource

class HasResource ct Source #

Class that indicates that a Content-Type has a specific Resource-Representation.

Associated Types

type Resource ct :: Type -> Type Source #

Associated type for this Content-Type

Instances

Instances details
HasResource (HAL t :: Type) Source # 
Instance details

Defined in Servant.Hateoas.ContentType.HAL

Associated Types

type Resource (HAL t) :: Type -> Type Source #

class HasResource ct => ToResource ct api a where Source #

Class for converting values of a to their respective Resource-Representation.

Methods

toResource :: Proxy ct -> Proxy api -> a -> Resource ct a Source #

Converts a value into it's Resource-Representation.

Instances

Instances details
(Related a, HasField (IdSelName a) a id, IsElem (GetOneApi a) api, HasLink (GetOneApi a), MkLink (GetOneApi a) Link ~ (id -> Link), BuildRels api (Relations a) a, HasResource (HAL t)) => ToResource (HAL t :: Type) (api :: Type) a Source # 
Instance details

Defined in Servant.Hateoas.ContentType.HAL

Methods

toResource :: Proxy (HAL t) -> Proxy api -> a -> Resource (HAL t) a Source #

Hypermedia-Relations

Type

data HRel Source #

Data-Kind for Hypermedia-Relations.

Constructors

HRel 

Fields

Instances

Instances details
BuildRels api ('[] :: [HRel]) a Source # 
Instance details

Defined in Servant.Hateoas.Resource

Methods

buildRels :: Proxy '[] -> Proxy api -> a -> [(String, Link)] Source #

(KnownSymbol relName, HasField selName a id, HasLink endpoint, IsElem endpoint api, MkLink endpoint Link ~ (id -> Link), BuildRels api rs a) => BuildRels api ('HRel relName selName endpoint ': rs) a Source # 
Instance details

Defined in Servant.Hateoas.Resource

Methods

buildRels :: Proxy ('HRel relName selName endpoint ': rs) -> Proxy api -> a -> [(String, Link)] Source #

Class

class Related a Source #

Types that have Hypermedia-Relations.

Associated Types

type IdSelName a :: Symbol Source #

Name of the record selector that holds the resources identifier

type GetOneApi a :: Type Source #

Servant-Endpoint for retrieving one a by its identifier

type CollectionName a :: Symbol Source #

Name for collected values

type CollectionName a = "items"

type Relations a :: [HRel] Source #

List of all relations a has

Construction

class BuildRels api rs a where Source #

Class for deriving Hypermedia-Relations for types.

Methods

buildRels :: Proxy rs -> Proxy api -> a -> [(String, Link)] Source #

Instances

Instances details
BuildRels api ('[] :: [HRel]) a Source # 
Instance details

Defined in Servant.Hateoas.Resource

Methods

buildRels :: Proxy '[] -> Proxy api -> a -> [(String, Link)] Source #

(KnownSymbol relName, HasField selName a id, HasLink endpoint, IsElem endpoint api, MkLink endpoint Link ~ (id -> Link), BuildRels api rs a) => BuildRels api ('HRel relName selName endpoint ': rs) a Source # 
Instance details

Defined in Servant.Hateoas.Resource

Methods

buildRels :: Proxy ('HRel relName selName endpoint ': rs) -> Proxy api -> a -> [(String, Link)] Source #

selfLink :: forall api a id. (Related a, HasField (IdSelName a) a id, IsElem (GetOneApi a) api, HasLink (GetOneApi a), MkLink (GetOneApi a) Link ~ (id -> Link)) => Proxy api -> a -> (String, Link) Source #

Generates the pair ("self", link) where link is the Link to a itself.

relatedLinks :: forall api a. (Related a, BuildRels api (Relations a) a) => Proxy api -> a -> [(String, Link)] Source #

Generates pairs (rel, link) for all related resources as defined with Relations.

defaultLinks :: forall api a id. (Related a, HasField (IdSelName a) a id, IsElem (GetOneApi a) api, HasLink (GetOneApi a), MkLink (GetOneApi a) Link ~ (id -> Link), BuildRels api (Relations a) a) => Proxy api -> a -> [(String, Link)] Source #

Generate Hypermedia-Links by default.

defaultLinks api x = selfLink api x : relatedLinks api x