runtime

package
v1.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 2, 2018 License: BSD-3-Clause Imports: 28 Imported by: 0

Documentation

Overview

Package runtime contains runtime helper functions used by servers which protoc-gen-grpc-gateway generates.

Index

Constants

View Source
const MIMEWildcard = "*"

MIMEWildcard is the fallback MIME type used for requests which do not match a registered MIME type.

View Source
const MetadataHeaderPrefix = "Grpc-Metadata-"

MetadataHeaderPrefix is the http prefix that represents custom metadata parameters to or from a gRPC call.

View Source
const MetadataPrefix = "grpcgateway-"

MetadataPrefix is prepended to permanent HTTP header keys (as specified by the IANA) when added to the gRPC context.

View Source
const MetadataTrailerPrefix = "Grpc-Trailer-"

MetadataTrailerPrefix is prepended to gRPC metadata as it is converted to HTTP headers in a response handled by grpc-gateway

Variables

View Source
var (
	// HTTPError replies to the request with the error.
	// You can set a custom function to this variable to customize error format.
	HTTPError = DefaultHTTPError
	// OtherErrorHandler handles the following error used by the gateway: StatusMethodNotAllowed StatusNotFound and StatusBadRequest
	OtherErrorHandler = DefaultOtherErrorHandler
)
View Source
var (
	// ErrNotMatch indicates that the given HTTP request path does not match to the pattern.
	ErrNotMatch = errors.New("not match to the path pattern")
	// ErrInvalidPattern indicates that the given definition of Pattern is not valid.
	ErrInvalidPattern = errors.New("invalid pattern")
)
View Source
var (
	// DefaultContextTimeout is used for gRPC call context.WithTimeout whenever a Grpc-Timeout inbound
	// header isn't present. If the value is 0 the sent `context` will not have a timeout.
	DefaultContextTimeout = 0 * time.Second
)

Functions

func AnnotateContext

func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (context.Context, error)

AnnotateContext adds context information such as metadata from the request.

At a minimum, the RemoteAddr is included in the fashion of "X-Forwarded-For", except that the forwarded destination is not another HTTP service but rather a gRPC service.

func Bool

func Bool(val string) (bool, error)

Bool converts the given string representation of a boolean value into bool.

func BoolP

func BoolP(val string) (*bool, error)

BoolP parses the given string representation of a boolean value, and returns a pointer to a bool whose value is same as the parsed value.

func BoolSlice added in v1.5.0

func BoolSlice(val, sep string) ([]bool, error)

BoolSlice converts 'val' where individual booleans are separated by 'sep' into a bool slice.

func Bytes added in v1.4.0

func Bytes(val string) ([]byte, error)

Bytes converts the given string representation of a byte sequence into a slice of bytes A bytes sequence is encoded in URL-safe base64 without padding

func BytesSlice added in v1.5.0

func BytesSlice(val, sep string) ([][]byte, error)

BytesSlice converts 'val' where individual bytes sequences, encoded in URL-safe base64 without padding, are separated by 'sep' into a slice of bytes slices slice.

func DefaultHTTPError

func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error)

DefaultHTTPError is the default implementation of HTTPError. If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode. If otherwise, it replies with http.StatusInternalServerError.

The response body returned by this function is a JSON object, which contains a member whose key is "error" and whose value is err.Error().

func DefaultHTTPProtoErrorHandler added in v1.3.0

func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error)

DefaultHTTPProtoErrorHandler is an implementation of HTTPError. If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode. If otherwise, it replies with http.StatusInternalServerError.

The response body returned by this function is a Status message marshaled by a Marshaler.

Do not set this function to HTTPError variable directly, use WithProtoErrorHandler option instead.

func DefaultHeaderMatcher added in v1.3.0

func DefaultHeaderMatcher(key string) (string, bool)

DefaultHeaderMatcher is used to pass http request headers to/from gRPC context. This adds permanent HTTP header keys (as specified by the IANA) to gRPC context with grpcgateway- prefix. HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata after removing prefix 'Grpc-Metadata-'.

func DefaultOtherErrorHandler

func DefaultOtherErrorHandler(w http.ResponseWriter, _ *http.Request, msg string, code int)

DefaultOtherErrorHandler is the default implementation of OtherErrorHandler. It simply writes a string representation of the given error into "w".

func Duration added in v1.3.1

func Duration(val string) (*duration.Duration, error)

Duration converts the given string into a timestamp.Duration.

func Enum added in v1.5.0

func Enum(val string, enumValMap map[string]int32) (int32, error)

Enum converts the given string into an int32 that should be type casted into the correct enum proto type.

func EnumSlice added in v1.5.0

func EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error)

EnumSlice converts 'val' where individual enums are separated by 'sep' into a int32 slice. Each individual int32 should be type casted into the correct enum proto type.

func Float32

func Float32(val string) (float32, error)

Float32 converts the given string representation of a floating point number into float32.

func Float32P

func Float32P(val string) (*float32, error)

Float32P parses the given string representation of a floating point number, and returns a pointer to a float32 whose value is same as the parsed number.

func Float32Slice added in v1.5.0

func Float32Slice(val, sep string) ([]float32, error)

Float32Slice converts 'val' where individual floating point numbers are separated by 'sep' into a float32 slice.

func Float64

func Float64(val string) (float64, error)

Float64 converts the given string representation into representation of a floating point number into float64.

func Float64P

func Float64P(val string) (*float64, error)

Float64P parses the given string representation of a floating point number, and returns a pointer to a float64 whose value is same as the parsed number.

func Float64Slice added in v1.5.0

func Float64Slice(val, sep string) ([]float64, error)

Float64Slice converts 'val' where individual floating point numbers are separated by 'sep' into a float64 slice.

func ForwardResponseMessage

func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error)

ForwardResponseMessage forwards the message "resp" from gRPC server to REST client.

func ForwardResponseStream

func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, recv func() (proto.Message, error), opts ...func(context.Context, http.ResponseWriter, proto.Message) error)

ForwardResponseStream forwards the stream from gRPC server to REST client.

func HTTPStatusFromCode

func HTTPStatusFromCode(code codes.Code) int

HTTPStatusFromCode converts a gRPC error code into the corresponding HTTP response status. See: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto

func Int32

func Int32(val string) (int32, error)

Int32 converts the given string representation of an integer into int32.

func Int32P

func Int32P(val string) (*int32, error)

Int32P parses the given string representation of an integer and returns a pointer to a int32 whose value is same as the parsed integer.

func Int32Slice added in v1.5.0

func Int32Slice(val, sep string) ([]int32, error)

Int32Slice converts 'val' where individual integers are separated by 'sep' into a int32 slice.

func Int64

func Int64(val string) (int64, error)

Int64 converts the given string representation of an integer into int64.

func Int64P

func Int64P(val string) (*int64, error)

Int64P parses the given string representation of an integer and returns a pointer to a int64 whose value is same as the parsed integer.

func Int64Slice added in v1.5.0

func Int64Slice(val, sep string) ([]int64, error)

Int64Slice converts 'val' where individual integers are separated by 'sep' into a int64 slice.

func MarshalerForRequest

func MarshalerForRequest(mux *ServeMux, r *http.Request) (inbound Marshaler, outbound Marshaler)

MarshalerForRequest returns the inbound/outbound marshalers for this request. It checks the registry on the ServeMux for the MIME type set by the Content-Type header. If it isn't set (or the request Content-Type is empty), checks for "*". If there are multiple Content-Type headers set, choose the first one that it can exactly match in the registry. Otherwise, it follows the above logic for "*"/InboundMarshaler/OutboundMarshaler.

func NewServerMetadataContext

func NewServerMetadataContext(ctx context.Context, md ServerMetadata) context.Context

NewServerMetadataContext creates a new context with ServerMetadata

func PopulateFieldFromPath

func PopulateFieldFromPath(msg proto.Message, fieldPathString string, value string) error

PopulateFieldFromPath sets a value in a nested Protobuf structure. It instantiates missing protobuf fields as it goes.

func PopulateQueryParameters

func PopulateQueryParameters(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error

PopulateQueryParameters populates "values" into "msg". A value is ignored if its key starts with one of the elements in "filter".

func String

func String(val string) (string, error)

String just returns the given string. It is just for compatibility to other types.

func StringP

func StringP(val string) (*string, error)

StringP returns a pointer to a string whose pointee is same as the given string value.

func StringSlice added in v1.5.0

func StringSlice(val, sep string) ([]string, error)

StringSlice converts 'val' where individual strings are separated by 'sep' into a string slice.

func Timestamp added in v1.3.1

func Timestamp(val string) (*timestamp.Timestamp, error)

Timestamp converts the given RFC3339 formatted string into a timestamp.Timestamp.

func Uint32

func Uint32(val string) (uint32, error)

Uint32 converts the given string representation of an integer into uint32.

func Uint32P

func Uint32P(val string) (*uint32, error)

Uint32P parses the given string representation of an integer and returns a pointer to a uint32 whose value is same as the parsed integer.

func Uint32Slice added in v1.5.0

func Uint32Slice(val, sep string) ([]uint32, error)

Uint32Slice converts 'val' where individual integers are separated by 'sep' into a uint32 slice.

func Uint64

func Uint64(val string) (uint64, error)

Uint64 converts the given string representation of an integer into uint64.

func Uint64P

func Uint64P(val string) (*uint64, error)

Uint64P parses the given string representation of an integer and returns a pointer to a uint64 whose value is same as the parsed integer.

func Uint64Slice added in v1.5.0

func Uint64Slice(val, sep string) ([]uint64, error)

Uint64Slice converts 'val' where individual integers are separated by 'sep' into a uint64 slice.

Types

type Decoder

type Decoder interface {
	Decode(v interface{}) error
}

Decoder decodes a byte sequence

type DecoderFunc

type DecoderFunc func(v interface{}) error

DecoderFunc adapts an decoder function into Decoder.

func (DecoderFunc) Decode

func (f DecoderFunc) Decode(v interface{}) error

Decode delegates invocations to the underlying function itself.

type DecoderWrapper added in v1.4.0

type DecoderWrapper struct {
	*json.Decoder
}

DecoderWrapper is a wrapper around a *json.Decoder that adds support for protos to the Decode method.

func (DecoderWrapper) Decode added in v1.4.0

func (d DecoderWrapper) Decode(v interface{}) error

Decode wraps the embedded decoder's Decode method to support protos using a jsonpb.Unmarshaler.

type Delimited added in v1.3.1

type Delimited interface {
	// Delimiter returns the record seperator for the stream.
	Delimiter() []byte
}

Delimited defines the streaming delimiter.

type Encoder

type Encoder interface {
	Encode(v interface{}) error
}

Encoder encodes gRPC payloads / fields into byte sequence.

type EncoderFunc

type EncoderFunc func(v interface{}) error

EncoderFunc adapts an encoder function into Encoder

func (EncoderFunc) Encode

func (f EncoderFunc) Encode(v interface{}) error

Encode delegates invocations to the underlying function itself.

type HandlerFunc

type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string)

A HandlerFunc handles a specific pair of path pattern and HTTP method.

type HeaderMatcherFunc added in v1.3.0

type HeaderMatcherFunc func(string) (string, bool)

HeaderMatcherFunc checks whether a header key should be forwarded to/from gRPC context.

type JSONBuiltin

type JSONBuiltin struct{}

JSONBuiltin is a Marshaler which marshals/unmarshals into/from JSON with the standard "encoding/json" package of Golang. Although it is generally faster for simple proto messages than JSONPb, it does not support advanced features of protobuf, e.g. map, oneof, ....

The NewEncoder and NewDecoder types return *json.Encoder and *json.Decoder respectively.

func (*JSONBuiltin) ContentType

func (*JSONBuiltin) ContentType() string

ContentType always Returns "application/json".

func (*JSONBuiltin) Delimiter added in v1.3.1

func (j *JSONBuiltin) Delimiter() []byte

Delimiter for newline encoded JSON streams.

func (*JSONBuiltin) Marshal

func (j *JSONBuiltin) Marshal(v interface{}) ([]byte, error)

Marshal marshals "v" into JSON

func (*JSONBuiltin) NewDecoder

func (j *JSONBuiltin) NewDecoder(r io.Reader) Decoder

NewDecoder returns a Decoder which reads JSON stream from "r".

func (*JSONBuiltin) NewEncoder

func (j *JSONBuiltin) NewEncoder(w io.Writer) Encoder

NewEncoder returns an Encoder which writes JSON stream into "w".

func (*JSONBuiltin) Unmarshal

func (j *JSONBuiltin) Unmarshal(data []byte, v interface{}) error

Unmarshal unmarshals JSON data into "v".

type JSONPb

type JSONPb jsonpb.Marshaler

JSONPb is a Marshaler which marshals/unmarshals into/from JSON with the "github.com/golang/protobuf/jsonpb". It supports fully functionality of protobuf unlike JSONBuiltin.

The NewDecoder method returns a DecoderWrapper, so the underlying *json.Decoder methods can be used.

func (*JSONPb) ContentType

func (*JSONPb) ContentType() string

ContentType always returns "application/json".

func (*JSONPb) Delimiter added in v1.3.1

func (j *JSONPb) Delimiter() []byte

Delimiter for newline encoded JSON streams.

func (*JSONPb) Marshal

func (j *JSONPb) Marshal(v interface{}) ([]byte, error)

Marshal marshals "v" into JSON.

func (*JSONPb) NewDecoder

func (j *JSONPb) NewDecoder(r io.Reader) Decoder

NewDecoder returns a Decoder which reads JSON stream from "r".

func (*JSONPb) NewEncoder

func (j *JSONPb) NewEncoder(w io.Writer) Encoder

NewEncoder returns an Encoder which writes JSON stream into "w".

func (*JSONPb) Unmarshal

func (j *JSONPb) Unmarshal(data []byte, v interface{}) error

Unmarshal unmarshals JSON "data" into "v"

type Marshaler

type Marshaler interface {
	// Marshal marshals "v" into byte sequence.
	Marshal(v interface{}) ([]byte, error)
	// Unmarshal unmarshals "data" into "v".
	// "v" must be a pointer value.
	Unmarshal(data []byte, v interface{}) error
	// NewDecoder returns a Decoder which reads byte sequence from "r".
	NewDecoder(r io.Reader) Decoder
	// NewEncoder returns an Encoder which writes bytes sequence into "w".
	NewEncoder(w io.Writer) Encoder
	// ContentType returns the Content-Type which this marshaler is responsible for.
	ContentType() string
}

Marshaler defines a conversion between byte sequence and gRPC payloads / fields.

type Pattern

type Pattern struct {
	// contains filtered or unexported fields
}

Pattern is a template pattern of http request paths defined in github.com/googleapis/googleapis/google/api/http.proto.

func MustPattern

func MustPattern(p Pattern, err error) Pattern

MustPattern is a helper function which makes it easier to call NewPattern in variable initialization.

func NewPattern

func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, error)

NewPattern returns a new Pattern from the given definition values. "ops" is a sequence of op codes. "pool" is a constant pool. "verb" is the verb part of the pattern. It is empty if the pattern does not have the part. "version" must be 1 for now. It returns an error if the given definition is invalid.

func (Pattern) Match

func (p Pattern) Match(components []string, verb string) (map[string]string, error)

Match examines components if it matches to the Pattern. If it matches, the function returns a mapping from field paths to their captured values. If otherwise, the function returns an error.

func (Pattern) String

func (p Pattern) String() string

func (Pattern) Verb

func (p Pattern) Verb() string

Verb returns the verb part of the Pattern.

type ProtoErrorHandlerFunc added in v1.3.0

type ProtoErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, error)

ProtoErrorHandlerFunc handles the error as a gRPC error generated via status package and replies to the request.

type ProtoMarshaller added in v1.3.1

type ProtoMarshaller struct{}

ProtoMarshaller is a Marshaller which marshals/unmarshals into/from serialize proto bytes

func (*ProtoMarshaller) ContentType added in v1.3.1

func (*ProtoMarshaller) ContentType() string

ContentType always returns "application/octet-stream".

func (*ProtoMarshaller) Marshal added in v1.3.1

func (*ProtoMarshaller) Marshal(value interface{}) ([]byte, error)

Marshal marshals "value" into Proto

func (*ProtoMarshaller) NewDecoder added in v1.3.1

func (marshaller *ProtoMarshaller) NewDecoder(reader io.Reader) Decoder

NewDecoder returns a Decoder which reads proto stream from "reader".

func (*ProtoMarshaller) NewEncoder added in v1.3.1

func (marshaller *ProtoMarshaller) NewEncoder(writer io.Writer) Encoder

NewEncoder returns an Encoder which writes proto stream into "writer".

func (*ProtoMarshaller) Unmarshal added in v1.3.1

func (*ProtoMarshaller) Unmarshal(data []byte, value interface{}) error

Unmarshal unmarshals proto "data" into "value"

type ServeMux

type ServeMux struct {
	// contains filtered or unexported fields
}

ServeMux is a request multiplexer for grpc-gateway. It matches http requests to patterns and invokes the corresponding handler.

func NewServeMux

func NewServeMux(opts ...ServeMuxOption) *ServeMux

NewServeMux returns a new ServeMux whose internal mapping is empty.

func (*ServeMux) GetForwardResponseOptions

func (s *ServeMux) GetForwardResponseOptions() []func(context.Context, http.ResponseWriter, proto.Message) error

GetForwardResponseOptions returns the ForwardResponseOptions associated with this ServeMux.

func (*ServeMux) Handle

func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc)

Handle associates "h" to the pair of HTTP method and path pattern.

func (*ServeMux) ServeHTTP

func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP dispatches the request to the first handler whose pattern matches to r.Method and r.Path.

type ServeMuxOption

type ServeMuxOption func(*ServeMux)

ServeMuxOption is an option that can be given to a ServeMux on construction.

func WithForwardResponseOption

func WithForwardResponseOption(forwardResponseOption func(context.Context, http.ResponseWriter, proto.Message) error) ServeMuxOption

WithForwardResponseOption returns a ServeMuxOption representing the forwardResponseOption.

forwardResponseOption is an option that will be called on the relevant context.Context, http.ResponseWriter, and proto.Message before every forwarded response.

The message may be nil in the case where just a header is being sent.

func WithIncomingHeaderMatcher added in v1.3.0

func WithIncomingHeaderMatcher(fn HeaderMatcherFunc) ServeMuxOption

WithIncomingHeaderMatcher returns a ServeMuxOption representing a headerMatcher for incoming request to gateway.

This matcher will be called with each header in http.Request. If matcher returns true, that header will be passed to gRPC context. To transform the header before passing to gRPC context, matcher should return modified header.

func WithMarshalerOption

func WithMarshalerOption(mime string, marshaler Marshaler) ServeMuxOption

WithMarshalerOption returns a ServeMuxOption which associates inbound and outbound Marshalers to a MIME type in mux.

func WithMetadata added in v1.3.0

func WithMetadata(annotator func(context.Context, *http.Request) metadata.MD) ServeMuxOption

WithMetadata returns a ServeMuxOption for passing metadata to a gRPC context.

This can be used by services that need to read from http.Request and modify gRPC context. A common use case is reading token from cookie and adding it in gRPC context.

func WithOutgoingHeaderMatcher added in v1.3.0

func WithOutgoingHeaderMatcher(fn HeaderMatcherFunc) ServeMuxOption

WithOutgoingHeaderMatcher returns a ServeMuxOption representing a headerMatcher for outgoing response from gateway.

This matcher will be called with each header in response header metadata. If matcher returns true, that header will be passed to http response returned from gateway. To transform the header before passing to response, matcher should return modified header.

func WithProtoErrorHandler added in v1.3.0

func WithProtoErrorHandler(fn ProtoErrorHandlerFunc) ServeMuxOption

WithProtoErrorHandler returns a ServeMuxOption for passing metadata to a gRPC context.

This can be used to handle an error as general proto message defined by gRPC. The response including body and status is not backward compatible with the default error handler. When this option is used, HTTPError and OtherErrorHandler are overwritten on initialization.

type ServerMetadata

type ServerMetadata struct {
	HeaderMD  metadata.MD
	TrailerMD metadata.MD
}

ServerMetadata consists of metadata sent from gRPC server.

func ServerMetadataFromContext

func ServerMetadataFromContext(ctx context.Context) (md ServerMetadata, ok bool)

ServerMetadataFromContext returns the ServerMetadata in ctx

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL