case class PartialServerEndpoint[SECURITY_INPUT, PRINCIPAL, INPUT, ERROR_OUTPUT, OUTPUT, -R, F[_]](endpoint: Endpoint[SECURITY_INPUT, INPUT, ERROR_OUTPUT, OUTPUT, R], securityLogic: MonadError[F] => SECURITY_INPUT => F[Either[ERROR_OUTPUT, PRINCIPAL]]) extends EndpointInputsOps[SECURITY_INPUT, INPUT, ERROR_OUTPUT, OUTPUT, R] with EndpointOutputsOps[SECURITY_INPUT, INPUT, ERROR_OUTPUT, OUTPUT, R] with EndpointErrorOutputVariantsOps[SECURITY_INPUT, INPUT, ERROR_OUTPUT, OUTPUT, R] with EndpointInfoOps[R] with EndpointMetaOps
An endpoint with the security logic provided, and the main logic yet unspecified. See Endpoint.serverSecurityLogic.
The provided security part of the server logic transforms inputs of type SECURITY_INPUT, either to an error of type ERROR_OUTPUT, or
value of type PRINCIPAL.
The part of the server logic which is not provided, will have to transform both PRINCIPAL and the rest of the input INPUT either
into an error, or a value of type OUTPUT.
Inputs/outputs can be added to partial endpoints as to regular endpoints. The shape of the error outputs can be adjusted in a limited
way, by adding new error output variants, similar as if they were defined using Tapir.oneOf; the variants and the existing error
outputs should usually have a common supertype (other than Any). Hence, it's possible to create a base, secured input, and then
specialise it with inputs, outputs and logic as needed.
Attributes
ERROR_OUTPUT
Error output parameter types.
F
The effect type used in the provided partial server logic.
INPUT
Input parameter types.
OUTPUT
Output parameter types.
PRINCIPAL
The type of the value returned by the security logic.
R
The capabilities that are required by this endpoint's inputs/outputs. Any, if no requirements.
SECURITY_INPUT
Security input parameter types, which the security logic accepts and returns a PRINCIPAL or an error ERROR_OUTPUT.
If the error type is an Either, e.g. when using errorOutEither, this method accepts server logic that returns either success or
the Left error type. Use of this method avoids having to wrap the returned error in Left.
If the error type is an Either, e.g. when using errorOutEither, this method accepts server logic that returns either success or
the Left error type. Use of this method avoids having to wrap the returned error in Left.
Attributes
def serverLogicOption(f: PRINCIPAL => INPUT => F[Option[OUTPUT]])(implicit eIsUnit: ERROR_OUTPUT=:=Unit): Full[SECURITY_INPUT, PRINCIPAL, INPUT, Unit, OUTPUT, R, F]
If the error type is an Either, e.g. when using errorOutEither, this method accepts server logic that returns either success or
the Right error type. Use of this method avoids having to wrap the returned error in Right.
If the error type is an Either, e.g. when using errorOutEither, this method accepts server logic that returns either success or
the Right error type. Use of this method avoids having to wrap the returned error in Right.
Replaces the current error output with a Tapir.oneOf output, where:
Replaces the current error output with a Tapir.oneOf output, where:
the first output variant is the current output: oneOfVariant(errorOutput)
the second output variant is the given o
The variant for the current endpoint output will be created using Tapir.oneOfVariant. Hence, the current output will be used if
the run-time class of the output matches E. If the erasure of the E type is different from E, there will be a compile-time
failure, as no such run-time check is possible. In this case, use errorOutVariantsFromCurrent and create a variant using one of
the other variant factory methods (e.g. Tapir.oneOfVariantValueMatcher).
During encoding/decoding, the new o variant will be considered after the current variant.
Usage example:
sealed trait Parent
case class Child1(v: String) extends Parent
case class Child2(v: String) extends Parent
val e: PublicEndpoint[Unit, Parent, Unit, Any] = endpoint
.errorOut(stringBody.mapTo[Child1])
.errorOutVariant[Parent](oneOfVariant(stringBody.mapTo[Child2]))
Replace the error output with a Tapir.oneOf output, using the variants returned by variants. The current output should be
included in one of the returned variants.
Replace the error output with a Tapir.oneOf output, using the variants returned by variants. The current output should be
included in one of the returned variants.
Allows creating the variant list in a custom order, placing the current variant in an arbitrary position, and using default variants
if necessary.
Basic information about the endpoint, excluding mapping information, with inputs sorted (first the method, then path, etc.). E.g.:
POST /books /add {header Authorization} {body as application/json (UTF-8)} -> {body as text/plain (UTF-8)}/-
Basic information about the endpoint, excluding mapping information, with inputs sorted (first the method, then path, etc.). E.g.:
POST /books /add {header Authorization} {body as application/json (UTF-8)} -> {body as text/plain (UTF-8)}/-
Shortened information about the endpoint. If the endpoint is named, returns the name, e.g. [my endpoint]. Otherwise, returns the
string representation of the method (if any) and path, e.g. POST /books/add
Shortened information about the endpoint. If the endpoint is named, returns the name, e.g. [my endpoint]. Otherwise, returns the
string representation of the method (if any) and path, e.g. POST /books/add