Tapir

Type members

Classlikes

final
class WebSocketBodyBuilder[REQ, REQ_CF <: CodecFormat, RESP, RESP_CF <: CodecFormat]

Inherited classlikes

implicit
class ModifyEach[F[_], T](t: F[T])(implicit f: ModifyFunctor[F, T])
implicit
class ModifyEachMap[F[_, _], K, T](t: F[K, T])(implicit fac: Factory[(K, T), F[K, T]])
Inherited from
ModifyMacroSupport
trait ModifyFunctor[F[_], A]

Inherited types

type TapirFile = File
Inherited from
TapirExtensions

Value members

Concrete methods

def anyFromStringBody[T, CF <: CodecFormat](codec: Codec[String, T, CF], charset: Charset): Body[String, T]

A body in any format, read using the given codec, from a raw string read using charset.

A body in any format, read using the given codec, from a raw string read using charset.

def anyFromUtf8StringBody[T, CF <: CodecFormat](codec: Codec[String, T, CF]): Body[String, T]

A body in any format, read using the given codec, from a raw string read using UTF-8.

A body in any format, read using the given codec, from a raw string read using UTF-8.

Inputs which describe authentication credentials with metadata.

Inputs which describe authentication credentials with metadata.

Usage:

Usage:

binaryBody(RawBodyType.FileBody)[MyType]

, given that a codec between a file and MyType is available in the implicit scope.

binaryBody(RawBodyType.FileBody)[MyType] }}} scope.

def byteArrayBody: Body[Array[Byte], Array[Byte]]
def byteBufferBody: Body[ByteBuffer, ByteBuffer]
def cookies: Header[List[Cookie]]
def customJsonBody[T : JsonCodec]: Body[String, T]

Requires an implicit Codec.JsonCodec in scope. Such a codec can be created using Codec.json.

Requires an implicit Codec.JsonCodec in scope. Such a codec can be created using Codec.json.

However, json codecs are usually derived from json-library-specific implicits. That's why integrations with various json libraries define jsonBody methods, which directly require the library-specific implicits.

Unless you have defined a custom json codec, the jsonBody methods should be used.

def emptyOutputAs[T](value: T): Atom[T]

An empty output. Useful if one of the oneOf branches of a coproduct type is a case object that should be mapped to an empty body.

An empty output. Useful if one of the oneOf branches of a coproduct type is a case object that should be mapped to an empty body.

Extract a value from a server request. This input is only used by server interpreters, it is ignored by documentation interpreters and the provided value is discarded by client interpreters.

Extract a value from a server request. This input is only used by server interpreters, it is ignored by documentation interpreters and the provided value is discarded by client interpreters.

def formBody[T : ([T] =>> Codec[String, T, XWwwFormUrlencoded])]: Body[String, T]
def formBody[T : ([T] =>> Codec[String, T, XWwwFormUrlencoded])](charset: Charset): Body[String, T]
def header[T : ([T] =>> Codec[List[String], T, TextPlain])](name: String): Header[T]
def header(h: Header): FixedHeader[Unit]
def header(name: String, value: String): FixedHeader[Unit]
def headers: Headers[List[Header]]
def inputStreamBody: Body[InputStream, InputStream]
def multipartBody[T](implicit multipartCodec: MultipartCodec[T]): Body[Seq[RawPart], T]
def oneOf[T](firstVariant: OneOfVariant[_ <: T], otherVariants: OneOfVariant[_ <: T]*): OneOf[T, T]

An output which contains a number of variant outputs. Each variant can contain different outputs and represent different content. To describe an output which represents same content, but with different content types, use oneOfBody.

An output which contains a number of variant outputs. Each variant can contain different outputs and represent different content. To describe an output which represents same content, but with different content types, use oneOfBody.

All possible outputs must have a common supertype (T). Typically, the supertype is a sealed trait, and the variants are implementing case classes.

When encoding to a response, the first matching output is chosen, using the following rules:

  1. the variant's appliesTo method, applied to the output value (as returned by the server logic) must return true.
  2. when a fixed content type is specified by the output, it must match the request's Accept header (if present). This implements content negotiation.

When decoding from a response, the first output which decodes successfully is chosen.

The outputs might vary in status codes, headers (e.g. different content types), and body implementations. However, for bodies, only replayable ones can be used, and they need to have the same raw representation (e.g. all byte-array-base, or all file-based).

Note that exhaustiveness of the variants (that all subtypes of T are covered) is not checked.

def oneOfBody[T](first: Body[_, T], others: Body[_, T]*): OneOfBody[T, T]

A body input or output, which can be one of the given variants. All variants should represent T instances using different content types. Hence, the content type is used as a discriminator to choose the appropriate variant.

A body input or output, which can be one of the given variants. All variants should represent T instances using different content types. Hence, the content type is used as a discriminator to choose the appropriate variant.

Should be used to describe an input or output which represents the same content, but using different content types. For an output which describes variants including possibly different outputs (representing different content), see oneOf.

The server behavior is as follows:

  • when encoding to a response, the first variant matching the request's Accept header is chosen (if present). Otherwise, the first variant is used. This implements content negotiation.
  • when decoding a request, the variant corresponding to the request's Content-Type header is chosen (if present). Otherwise, a decode failure is returned, which by default results in an 415 Unsupported Media Type response.

The client behavior is as follows:

  • when encoding a request, the first variant is used.
  • when decoding a response, the variant corresponding to the response's Content-Type header is chosen (if present). Otherwise, the first variant is used. For client interpreters to work correctly, all body variants must have the same raw type (e.g. all are string-based or all byte-array-based)

All possible bodies must have the same type T. Typically, the bodies will vary in the Codecs that are used for the body.

def oneOfBody[T](first: (ContentTypeRange, Body[_, T]), others: (ContentTypeRange, Body[_, T])*): OneOfBody[T, T]

See oneOfBody.

See oneOfBody.

Allows explicitly specifying the content type range, for which each body will be used, instead of defaulting to the exact media type as specified by the body's codec. This is only used when choosing which body to decode.

Create a fallback variant to be used in oneOf output descriptions. Multiple such variants can be specified, with different body content types.

Create a fallback variant to be used in oneOf output descriptions. Multiple such variants can be specified, with different body content types.

Create a one-of-variant which uses output if the class of the provided value (when interpreting as a server) matches the runtime class of T.

Create a one-of-variant which uses output if the class of the provided value (when interpreting as a server) matches the runtime class of T.

This will fail at compile-time if the type erasure of T is different from T, as a runtime check in this situation would give invalid results. In such cases, use oneOfVariantClassMatcher, oneOfVariantValueMatcher or oneOfVariantFromMatchType instead.

Should be used in oneOf output descriptions.

def oneOfVariant[T : ErasureSameAsType](code: StatusCode, output: EndpointOutput[T]): OneOfVariant[T]

Create a one-of-variant which uses output if the class of the provided value (when interpreting as a server) matches the runtime class of T. Adds a fixed status-code output with the given value.

Create a one-of-variant which uses output if the class of the provided value (when interpreting as a server) matches the runtime class of T. Adds a fixed status-code output with the given value.

This will fail at compile-time if the type erasure of T is different from T, as a runtime check in this situation would give invalid results. In such cases, use oneOfVariantClassMatcher, oneOfVariantValueMatcher or oneOfVariantFromMatchType instead.

Should be used in oneOf output descriptions.

def oneOfVariantClassMatcher[T](output: EndpointOutput[T], runtimeClass: Class[_]): OneOfVariant[T]

Create a one-of-variant which uses output if the class of the provided value (when interpreting as a server) matches the given runtimeClass. Note that this does not take into account type erasure.

Create a one-of-variant which uses output if the class of the provided value (when interpreting as a server) matches the given runtimeClass. Note that this does not take into account type erasure.

Should be used in oneOf output descriptions.

def oneOfVariantClassMatcher[T](code: StatusCode, output: EndpointOutput[T], runtimeClass: Class[_]): OneOfVariant[T]

Create a one-of-variant which uses output i the class of the provided value (when interpreting as a server) matches the given runtimeClass. Note that this does not take into account type erasure. Adds a fixed status-code output with the given value.

Create a one-of-variant which uses output i the class of the provided value (when interpreting as a server) matches the given runtimeClass. Note that this does not take into account type erasure. Adds a fixed status-code output with the given value.

Should be used in oneOf output descriptions.

def oneOfVariantExactMatcher[T : ClassTag](output: EndpointOutput[T])(firstExactValue: T, rest: T*): OneOfVariant[T]

Create a one-of-variant which output if the provided value exactly matches one of the values provided in the second argument list.

Create a one-of-variant which output if the provided value exactly matches one of the values provided in the second argument list.

Should be used in oneOf output descriptions.

def oneOfVariantExactMatcher[T : ClassTag](code: StatusCode, output: EndpointOutput[T])(firstExactValue: T, rest: T*): OneOfVariant[T]

Create a one-of-variant which uses output if the provided value exactly matches one of the values provided in the second argument list. Adds a fixed status-code output with the given value.

Create a one-of-variant which uses output if the provided value exactly matches one of the values provided in the second argument list. Adds a fixed status-code output with the given value.

Should be used in oneOf output descriptions.

Experimental!

Experimental!

Create a one-of-variant which uses output if the provided value matches the target type, as checked by MatchType. Instances of MatchType are automatically derived and recursively check that classes of all fields match, to bypass issues caused by type erasure.

Should be used in oneOf output descriptions.

def oneOfVariantFromMatchType[T : MatchType](code: StatusCode, output: EndpointOutput[T]): OneOfVariant[T]

Experimental!

Experimental!

Create a one-of-variant which uses output if the provided value matches the target type, as checked by MatchType. Instances of MatchType are automatically derived and recursively check that classes of all fields match, to bypass issues caused by type erasure. Adds a fixed status-code output with the given value.

Should be used in oneOf output descriptions.

def oneOfVariantValueMatcher[T](output: EndpointOutput[T])(matcher: PartialFunction[Any, Boolean]): OneOfVariant[T]

Create a one-of-variant which uses output if the provided value (when interpreting as a server matches the matcher predicate.

Create a one-of-variant which uses output if the provided value (when interpreting as a server matches the matcher predicate.

Should be used in oneOf output descriptions.

def oneOfVariantValueMatcher[T](code: StatusCode, output: EndpointOutput[T])(matcher: PartialFunction[Any, Boolean]): OneOfVariant[T]

Create a one-of-variant which uses output if the provided value (when interpreting as a server matches the matcher predicate. Adds a fixed status-code output with the given value.

Create a one-of-variant which uses output if the provided value (when interpreting as a server matches the matcher predicate. Adds a fixed status-code output with the given value.

Should be used in oneOf output descriptions.

def path[T : ([T] =>> Codec[String, T, TextPlain])]: PathCapture[T]
def path[T : ([T] =>> Codec[String, T, TextPlain])](name: String): PathCapture[T]
def paths: PathsCapture[List[String]]
def plainBody[T : ([T] =>> Codec[String, T, TextPlain])]: Body[String, T]
def plainBody[T : ([T] =>> Codec[String, T, TextPlain])](charset: Charset): Body[String, T]
def query[T : ([T] =>> Codec[List[String], T, TextPlain])](name: String): Query[T]
def queryParams: QueryParams[QueryParams]
def rawBinaryBody[R](rbt: Binary[R])(implicit codec: Codec[R, R, OctetStream]): Body[R, R]
def setCookie(name: String): Header[CookieValueWithMeta]
def setCookieOpt(name: String): Header[Option[CookieValueWithMeta]]
def setCookies: Header[List[CookieWithMeta]]
def statusCode: StatusCode[StatusCode]

An output which maps to the status code in the response.

An output which maps to the status code in the response.

def statusCode(statusCode: StatusCode): FixedStatusCode[Unit]

An fixed status code output.

An fixed status code output.

def streamBinaryBody[S](s: Streams[S]): StreamBodyIO[BinaryStream, BinaryStream, S]

Creates a stream body with a binary schema. The application/octet-stream media type will be used by default, but can be later overridden by providing a custom Content-Type header value.

Creates a stream body with a binary schema. The application/octet-stream media type will be used by default, but can be later overridden by providing a custom Content-Type header value.

Value Params
s

A supported streams implementation.

def streamBody[S, T](s: Streams[S])(schema: Schema[T], format: CodecFormat, charset: Option[Charset]): StreamBodyIO[BinaryStream, BinaryStream, S]

Creates a stream body with the given schema.

Creates a stream body with the given schema.

Value Params
charset

An optional charset of the resulting stream's data, to be used in the content type.

format

The media type to use by default. Can be later overridden by providing a custom Content-Type header.

s

A supported streams implementation.

schema

Schema of the body. This should be a schema for the "deserialized" stream.

def streamTextBody[S](s: Streams[S])(format: CodecFormat, charset: Option[Charset]): StreamBodyIO[BinaryStream, BinaryStream, S]

Creates a stream body with a text schema.

Creates a stream body with a text schema.

Value Params
charset

An optional charset of the resulting stream's data, to be used in the content type.

format

The media type to use by default. Can be later overridden by providing a custom Content-Type header.

s

A supported streams implementation.

def stringBody: Body[String, String]
def stringBody(charset: String): Body[String, String]
def stringBody(charset: Charset): Body[String, String]
def webSocketBody[REQ, REQ_CF <: CodecFormat, RESP, RESP_CF <: CodecFormat]: WebSocketBodyBuilder[REQ, REQ_CF, RESP, RESP_CF]
Type Params
REQ

The type of messages that are sent to the server.

REQ_CF

The codec format (media type) of messages that are sent to the server.

RESP

The type of messages that are received from the server.

RESP_CF

The codec format (media type) of messages that are received from the server.

def webSocketBodyRaw[S](s: Streams[S]): WebSocketBodyOutput[Pipe[WebSocketFrame, WebSocketFrame], WebSocketFrame, WebSocketFrame, Pipe[WebSocketFrame, WebSocketFrame], S]
def xmlBody[T : XmlCodec]: Body[String, T]

Requires an implicit Codec.XmlCodec in scope. Such a codec can be created using Codec.xml.

Requires an implicit Codec.XmlCodec in scope. Such a codec can be created using Codec.xml.

Deprecated methods

@deprecated(message = "Use customJsonBody", since = "0.18.0")
def anyJsonBody[T : JsonCodec]: Body[String, T]
Deprecated
[Since version 0.18.0] Use customJsonBody
@deprecated("Use oneOfDefaultVariant", since = "0.19.0")
Deprecated
[Since version 0.19.0]
@deprecated("Use oneOfVariant", since = "0.19.0")
def oneOfMapping[T : ErasureSameAsType](code: StatusCode, output: EndpointOutput[T]): OneOfVariant[T]
Deprecated
[Since version 0.19.0]
@deprecated("Use oneOfVariantClassMatcher", since = "0.19.0")
def oneOfMappingClassMatcher[T](code: StatusCode, output: EndpointOutput[T], runtimeClass: Class[_]): OneOfVariant[T]
Deprecated
[Since version 0.19.0]
@deprecated("Use oneOfVariantExactMatcher", since = "0.19.0")
def oneOfMappingExactMatcher[T : ClassTag](code: StatusCode, output: EndpointOutput[T])(firstExactValue: T, rest: T*): OneOfVariant[T]
Deprecated
[Since version 0.19.0]
@deprecated("Use oneOfVariantFromMatchType", since = "0.19.0")
def oneOfMappingFromMatchType[T : MatchType](code: StatusCode, output: EndpointOutput[T]): OneOfVariant[T]
Deprecated
[Since version 0.19.0]
@deprecated("Use oneOfVariantValueMatcher", since = "0.19.0")
def oneOfMappingValueMatcher[T](code: StatusCode, output: EndpointOutput[T])(matcher: PartialFunction[Any, Boolean]): OneOfVariant[T]
Deprecated
[Since version 0.19.0]

Inherited methods

def clientIp: EndpointInput[Option[String]]
Inherited from
TapirComputedInputs
def fileGetServerEndpoint[F[_]](prefix: EndpointInput[Unit])(systemPath: String): ServerEndpoint[Any, F]

A server endpoint, which exposes a single file from local storage found at systemPath, using the given path.

A server endpoint, which exposes a single file from local storage found at systemPath, using the given path.

fileGetServerEndpoint("static" / "hello.html")("/home/app/static/data.html")
Inherited from
TapirStaticContentEndpoints
def filesGetServerEndpoint[F[_]](prefix: EndpointInput[Unit])(systemPath: String, fileFilter: List[String] => Boolean): ServerEndpoint[Any, F]

A server endpoint, which exposes files from local storage found at systemPath, using the given prefix. Typically, the prefix is a path, but it can also contain other inputs. For example:

A server endpoint, which exposes files from local storage found at systemPath, using the given prefix. Typically, the prefix is a path, but it can also contain other inputs. For example:

filesGetServerEndpoint("static" / "files")("/home/app/static")

A request to /static/files/css/styles.css will try to read the /home/app/static/css/styles.css file.

Value Params
fileFilter

file will exposed only if this function returns true.

Inherited from
TapirStaticContentEndpoints
def filesHeadServerEndpoint[F[_]](prefix: EndpointInput[Unit])(systemPath: String, fileFilter: List[String] => Boolean): ServerEndpoint[Any, F]

A server endpoint, used to verify if sever supports range requests for file under particular path Additionally it verify file existence and returns its size

A server endpoint, used to verify if sever supports range requests for file under particular path Additionally it verify file existence and returns its size

Value Params
fileFilter

file will exposed only if this function returns true.

Inherited from
TapirStaticContentEndpoints
def filesServerEndpoints[F[_]](prefix: EndpointInput[Unit])(systemPath: String, fileFilter: List[String] => Boolean): List[ServerEndpoint[Any, F]]

Create a pair of endpoints (head, get) for exposing files from local storage found at systemPath, using the given prefix. Typically, the prefix is a path, but it can also contain other inputs. For example:

Create a pair of endpoints (head, get) for exposing files from local storage found at systemPath, using the given prefix. Typically, the prefix is a path, but it can also contain other inputs. For example:

filesServerEndpoints("static" / "files")("/home/app/static")

A request to /static/files/css/styles.css will try to read the /home/app/static/css/styles.css file.

Value Params
fileFilter

file will exposed only if this function returns true.

Inherited from
TapirStaticContentEndpoints
Inherited from
TapirComputedInputs
def pathBody: Body[FileRange, Path]
Inherited from
TapirExtensions
def resourceGetServerEndpoint[F[_]](prefix: EndpointInput[Unit])(classLoader: ClassLoader, resourcePath: String, useGzippedIfAvailable: Boolean): ServerEndpoint[Any, F]

A server endpoint, which exposes a single resource available from the given classLoader at resourcePath, using the given path.

A server endpoint, which exposes a single resource available from the given classLoader at resourcePath, using the given path.

resourceGetServerEndpoint("static" / "hello.html")(classOf[App].getClassLoader, "app/data.html")
Inherited from
TapirStaticContentEndpoints
def resourcesGetServerEndpoint[F[_]](prefix: EndpointInput[Unit])(classLoader: ClassLoader, resourcePrefix: String, useGzippedIfAvailable: Boolean, resourceFilter: List[String] => Boolean): ServerEndpoint[Any, F]

A server endpoint, which exposes resources available from the given classLoader, using the given prefix. Typically, the prefix is a path, but it can also contain other inputs. For example:

A server endpoint, which exposes resources available from the given classLoader, using the given prefix. Typically, the prefix is a path, but it can also contain other inputs. For example:

resourcesGetServerEndpoint("static" / "files")(classOf[App].getClassLoader, "app")

A request to /static/files/css/styles.css will try to read the /app/css/styles.css resource.

Value Params
resourceFilter

resource will exposed only if this function returns true.

Inherited from
TapirStaticContentEndpoints

Concrete fields

val emptyOutput: Empty[Unit]

An empty output.

An empty output.

val endpoint: PublicEndpoint[Unit, Unit, Unit, Any]
val htmlBodyUtf8: Body[String, String]
val infallibleEndpoint: PublicEndpoint[Unit, Nothing, Unit, Any]
val multipartBody: Body[Seq[RawPart], Seq[Part[Array[Byte]]]]

Inherited fields

An input which matches if the request URI ends with a trailing slash, otherwise the result is a decode failure on the path. Has no effect when used by documentation or client interpreters.

An input which matches if the request URI ends with a trailing slash, otherwise the result is a decode failure on the path. Has no effect when used by documentation or client interpreters.

Inherited from
TapirComputedInputs

Implicits

Implicits

implicit
def stringToPath(s: String): FixedPath[Unit]

Inherited implicits

final implicit
def ModifyEach[F[_], T](t: F[T])(implicit f: ModifyFunctor[F, T]): ModifyEach[F, T]
final implicit
def ModifyEachMap[F[_, _], K, T](t: F[K, T])(implicit fac: Factory[(K, T), F[K, T]]): ModifyEachMap[F, K, T]
Inherited from
ModifyMacroSupport
implicit
implicit
def traversableModifyFunctor[F[_], A](implicit fac: Factory[A, F[A]], ev: F[A] => Iterable[A]): ModifyFunctor[F, A]
Inherited from
ModifyMacroSupport