Service

trait Service[Alg[_[_, _, _, _, _]], Op[_, _, _, _, _]] extends Transformable[Alg] with Provider[Alg, Op]

Generic representation of a service, as a list of "endpoints" (mapping to smithy operations).

This abstraction lets us retrieve all information necessary to the generic implementation of protocols, as well as transform implementations of finally-encoded interfaces into interpreters (natural transformations) that operate on initially-encoded GADTs.

Type parameters:
Alg

: a finally-encoded interface (commonly called algebra) that works against an abstract "effect" that takes 5 type parameters: Input, Error, Output, StreamedInput, StreamedOutput

Op

: an initially encoded version of the finally-encoded interface. Typically, a GADT that acts as a reification of the operations. Passing the reified versions around makes it drastically easier to implement logic generically, without involving metaprogramming.

Companion:
object
trait Provider[Alg, Op]
trait HasId
trait Transformable[Alg]
class Object
trait Matchable
class Any

Value members

Abstract methods

def asTransformation[P[_, _, _, _, _]](impl: Alg[P]): Transformation[Op, P]
def endpoint[I, E, O, SI, SO](op: Op[I, E, O, SI, SO]): (I, Endpoint[Op, I, E, O, SI, SO])
def endpoints: List[Endpoint[Op, _, _, _, _, _]]
def transform[P[_, _, _, _, _]](transformation: Transformation[Op, P]): Alg[P]

Concrete methods

def transformWithEndpoint[P[_, _, _, _, _], P1[_, _, _, _, _]](alg: Alg[P], transformation: ZippedWithEndpoint[P, Op, P1]): Alg[P1]

Inherited methods

def id: ShapeId
Inherited from:
HasId
def transform[F[_, _, _, _, _], G[_, _, _, _, _]](alg: Alg[F], transformation: Transformation[F, G]): Alg[G]
Inherited from:
Transformable

Concrete fields

val opToEndpoint: Transformation[Op, [_, _, _, _, _] =>> Endpoint[Op, _$12, _$13, _$14, _$15, _$16]]
val service: Service[Alg, Op]

Implicits

Implicits

implicit val serviceInstance: Service[Alg, Op]