apis

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: May 8, 2022 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterPathPrefix

func RegisterPathPrefix(
	parentRouter *mux.Router, pathPrefix string, methodHandlers MethodHandlers,
) *mux.Router

RegisterPathPrefix registers new method handler for a path prefix

Types

type APIRestJetStreamDataplaneHandler

type APIRestJetStreamDataplaneHandler struct {
	goutils.RestAPIHandler
	// contains filtered or unexported fields
}

APIRestJetStreamDataplaneHandler REST handler for JetStream dataplane

func GetAPIRestJetStreamDataplaneHandler

func GetAPIRestJetStreamDataplaneHandler(
	baseContext context.Context,
	client *core.NatsClient,
	httpConfig *common.HTTPConfig,
	runTimePublisher dataplane.JetStreamPublisher,
	ackBroadcast dataplane.JetStreamACKBroadcaster,
	wg *sync.WaitGroup,
) (APIRestJetStreamDataplaneHandler, error)

GetAPIRestJetStreamDataplaneHandler define APIRestJetStreamDataplaneHandler

func (APIRestJetStreamDataplaneHandler) Alive

Alive godoc @Summary For dataplane REST API liveness check @Description Will return success to indicate dataplane REST API module is live @tags Dataplane @Produce json @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {string} string "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Router /v1/data/alive [get]

func (APIRestJetStreamDataplaneHandler) AliveHandler

AliveHandler Wrapper around Alive

func (APIRestJetStreamDataplaneHandler) PublishMessage

PublishMessage godoc @Summary Publish a message @Description Publish a Base64 encoded message to a JetStream subject @tags Dataplane @Accept plain @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param subjectName path string true "JetStream subject to publish under" @Param message body string true "Message to publish in Base64 encoding" @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/data/subject/{subjectName} [post]

func (APIRestJetStreamDataplaneHandler) PublishMessageHandler

func (h APIRestJetStreamDataplaneHandler) PublishMessageHandler() http.HandlerFunc

PublishMessageHandler Wrapper around PublishMessage

func (APIRestJetStreamDataplaneHandler) PushSubscribe

PushSubscribe godoc @Summary Establish a pull subscribe session @Description Establish a JetStream pull subscribe session for a client. This is a long lived server send event stream. The stream will close on client disconnect, server shutdown, or server internal error. @tags Dataplane @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Param consumerName path string true "JetStream consumer name" @Param subject_name query string true "JetStream subject to subscribe to" @Param max_msg_inflight query integer false "Max number of inflight messages (DEFAULT: 1)" @Param delivery_group query string false "Needed if consumer uses delivery groups" @Success 200 {object} APIRestRespDataMessage "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/data/stream/{streamName}/consumer/{consumerName} [get]

func (APIRestJetStreamDataplaneHandler) PushSubscribeHandler

func (h APIRestJetStreamDataplaneHandler) PushSubscribeHandler() http.HandlerFunc

PushSubscribeHandler Wrapper around PushSubscribe

func (APIRestJetStreamDataplaneHandler) Ready

Ready godoc @Summary For dataplane REST API readiness check @Description Will return success if dataplane REST API module is ready for use @tags Dataplane @Produce json @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {string} string "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Router /v1/data/ready [get]

func (APIRestJetStreamDataplaneHandler) ReadyHandler

ReadyHandler Wrapper around Alive

func (APIRestJetStreamDataplaneHandler) ReceiveMsgACK

ReceiveMsgACK godoc @Summary Handle ACK for message @Description Process JetStream message ACK for a stream / consumer @tags Dataplane @Accept json @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Param consumerName path string true "JetStream consumer name" @Param sequenceNum body dataplane.AckSeqNum true "Message message sequence numbers" @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/data/stream/{streamName}/consumer/{consumerName}/ack [post]

func (APIRestJetStreamDataplaneHandler) ReceiveMsgACKHandler

func (h APIRestJetStreamDataplaneHandler) ReceiveMsgACKHandler() http.HandlerFunc

ReceiveMsgACKHandler Wrapper around ReceiveMsgACK

type APIRestJetStreamManagementHandler

type APIRestJetStreamManagementHandler struct {
	goutils.RestAPIHandler
	// contains filtered or unexported fields
}

APIRestJetStreamManagementHandler REST handler for JetStream management

func GetAPIRestJetStreamManagementHandler

func GetAPIRestJetStreamManagementHandler(
	core management.JetStreamController,
	httpConfig *common.HTTPConfig,
) (APIRestJetStreamManagementHandler, error)

GetAPIRestJetStreamManagementHandler define APIRestJetStreamManagementHandler

func (APIRestJetStreamManagementHandler) Alive

Alive godoc @Summary For management REST API liveness check @Description Will return success to indicate management REST API module is live @tags Management @Produce json @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {string} string "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Router /v1/admin/alive [get]

func (APIRestJetStreamManagementHandler) AliveHandler

AliveHandler Wrapper around Alive

func (APIRestJetStreamManagementHandler) ChangeStreamSubjects

func (h APIRestJetStreamManagementHandler) ChangeStreamSubjects(
	w http.ResponseWriter, r *http.Request,
)

ChangeStreamSubjects godoc @Summary Change subjects of a stream @Description Change the list of subjects of interest for a stream @tags Management @Accept json @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Param subjects body APIRestReqStreamSubjects true "List of new subjects" @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream/{streamName}/subject [put]

func (APIRestJetStreamManagementHandler) ChangeStreamSubjectsHandler

func (h APIRestJetStreamManagementHandler) ChangeStreamSubjectsHandler() http.HandlerFunc

ChangeStreamSubjectsHandler Wrapper around ChangeStreamSubjects

func (APIRestJetStreamManagementHandler) CreateConsumer

CreateConsumer godoc @Summary Create a consumer on a stream @Description Create a new consumer on a stream. The stream must already be defined. @tags Management @Accept json @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Param consumerParam body management.JetStreamConsumerParam true "Consumer parameters" @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream/{streamName}/consumer [post]

func (APIRestJetStreamManagementHandler) CreateConsumerHandler

func (h APIRestJetStreamManagementHandler) CreateConsumerHandler() http.HandlerFunc

CreateConsumerHandler Wrapper around CreateConsumer

func (APIRestJetStreamManagementHandler) CreateStream

CreateStream godoc @Summary Define new stream @Description Define new JetStream stream @tags Management @Accept json @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param setting body management.JSStreamParam true "JetStream stream setting" @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream [post]

func (APIRestJetStreamManagementHandler) CreateStreamHandler

func (h APIRestJetStreamManagementHandler) CreateStreamHandler() http.HandlerFunc

CreateStreamHandler Wrapper around CreateStream

func (APIRestJetStreamManagementHandler) DeleteConsumer

DeleteConsumer godoc @Summary Delete one consumer of a stream @Description Delete one consumer of a stream @tags Management @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Param consumerName path string true "JetStream consumer name" @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream/{streamName}/consumer/{consumerName} [delete]

func (APIRestJetStreamManagementHandler) DeleteConsumerHandler

func (h APIRestJetStreamManagementHandler) DeleteConsumerHandler() http.HandlerFunc

DeleteConsumerHandler Wrapper around DeleteConsumer

func (APIRestJetStreamManagementHandler) DeleteStream

DeleteStream godoc @Summary Delete a stream @Description Delete a stream @tags Management @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream/{streamName} [delete]

func (APIRestJetStreamManagementHandler) DeleteStreamHandler

func (h APIRestJetStreamManagementHandler) DeleteStreamHandler() http.HandlerFunc

DeleteStreamHandler Wrapper around DeleteStream

func (APIRestJetStreamManagementHandler) GetAllConsumers

GetAllConsumers godoc @Summary Get all consumers of a stream @Description Query for the details of all consumers of a stream @tags Management @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Success 200 {object} APIRestRespAllJetStreamConsumers "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream/{streamName}/consumer [get]

func (APIRestJetStreamManagementHandler) GetAllConsumersHandler

func (h APIRestJetStreamManagementHandler) GetAllConsumersHandler() http.HandlerFunc

GetAllConsumersHandler Wrapper around GetAllConsumers

func (APIRestJetStreamManagementHandler) GetAllStreams

GetAllStreams godoc @Summary Query for info on all streams @Description Query for the details of all streams @tags Management @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Success 200 {object} APIRestRespAllJetStreams "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream [get]

func (APIRestJetStreamManagementHandler) GetAllStreamsHandler

func (h APIRestJetStreamManagementHandler) GetAllStreamsHandler() http.HandlerFunc

GetAllStreamsHandler Wrapper around GetAllStreams

func (APIRestJetStreamManagementHandler) GetConsumer

GetConsumer godoc @Summary Get one consumer of a stream @Description Query for the details of a consumer on a stream @tags Management @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Param consumerName path string true "JetStream consumer name" @Success 200 {object} APIRestRespOneJetStreamConsumer "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream/{streamName}/consumer/{consumerName} [get]

func (APIRestJetStreamManagementHandler) GetConsumerHandler

func (h APIRestJetStreamManagementHandler) GetConsumerHandler() http.HandlerFunc

GetConsumerHandler Wrapper around GetConsumer

func (APIRestJetStreamManagementHandler) GetStream

GetStream godoc @Summary Query for info on one stream @Description Query for the details of one stream @tags Management @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Success 200 {object} APIRestRespOneJetStream "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream/{streamName} [get]

func (APIRestJetStreamManagementHandler) GetStreamHandler

func (h APIRestJetStreamManagementHandler) GetStreamHandler() http.HandlerFunc

GetStreamHandler Wrapper around GetStream

func (APIRestJetStreamManagementHandler) Ready

Ready godoc @Summary For management REST API readiness check @Description Will return success if management REST API module is ready for use @tags Management @Produce json @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {string} string "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Router /v1/admin/ready [get]

func (APIRestJetStreamManagementHandler) ReadyHandler

ReadyHandler Wrapper around Alive

func (APIRestJetStreamManagementHandler) UpdateStreamLimits

func (h APIRestJetStreamManagementHandler) UpdateStreamLimits(
	w http.ResponseWriter, r *http.Request,
)

UpdateStreamLimits godoc @Summary Change limits a stream @Description Change the data retention limits of a stream @tags Management @Accept json @Produce json @Param Httpmq-Request-ID header string false "User provided request ID to match against logs" @Param streamName path string true "JetStream stream name" @Param limits body management.JSStreamLimits true "New stream limits" @Success 200 {object} goutils.RestAPIBaseResponse "success" @Failure 400 {object} goutils.RestAPIBaseResponse "error" @Failure 404 {string} string "error" @Failure 500 {object} goutils.RestAPIBaseResponse "error" @Header 200,400,500 {string} Httpmq-Request-ID "Request ID to match against logs" @Router /v1/admin/stream/{streamName}/limit [put]

func (APIRestJetStreamManagementHandler) UpdateStreamLimitsHandler

func (h APIRestJetStreamManagementHandler) UpdateStreamLimitsHandler() http.HandlerFunc

UpdateStreamLimitsHandler Wrapper around UpdateStreamLimits

type APIRestReqStreamSubjects

type APIRestReqStreamSubjects struct {
	// Subjects the list of new subject this stream will listen to
	Subjects []string `json:"subjects" validate:"required,min=1"`
}

APIRestReqStreamSubjects subject change parameters

type APIRestRespAllJetStreamConsumers

type APIRestRespAllJetStreamConsumers struct {
	goutils.RestAPIBaseResponse
	// Consumers the set of consumer details mapped against consumer name
	Consumers map[string]APIRestRespConsumerInfo `json:"consumers,omitempty"`
}

APIRestRespAllJetStreamConsumers response for listing all consumers

type APIRestRespAllJetStreams

type APIRestRespAllJetStreams struct {
	goutils.RestAPIBaseResponse
	// Streams the set of stream details mapped against its names
	Streams map[string]APIRestRespStreamInfo `json:"streams,omitempty"`
}

APIRestRespAllJetStreams response for listing all streams

type APIRestRespConsumerConfig

type APIRestRespConsumerConfig struct {
	// Description an optional description of the consumer
	Description string `json:"notes,omitempty"`
	// DeliverSubject subject this consumer is listening on
	DeliverSubject string `json:"deliver_subject,omitempty"`
	// DeliverGroup is the delivery group if this consumer uses delivery group
	//
	// A consumer using delivery group allows multiple clients to subscribe under the same consumer
	// and group name tuple. For subjects this consumer listens to, the messages will be shared
	// amongst the connected clients.
	DeliverGroup string `json:"deliver_group,omitempty"`
	// MaxDeliver max number of times a message can be deliveried (including retry) to this consumer
	MaxDeliver int `json:"max_deliver,omitempty"`
	// AckWait duration (ns) to wait for an ACK for the delivery of a message
	AckWait time.Duration `json:"ack_wait" swaggertype:"primitive,integer" validate:"required"`
	// FilterSubject sets the consumer to filter for subjects matching this NATs subject string
	//
	// See https://docs.nats.io/nats-concepts/subjects
	FilterSubject string `json:"filter_subject,omitempty"`
	// MaxWaiting NATS JetStream does not clearly document this
	MaxWaiting int `json:"max_waiting,omitempty"`
	// MaxAckPending controls the max number of un-ACKed messages permitted in-flight
	MaxAckPending int `json:"max_ack_pending,omitempty"`
}

APIRestRespConsumerConfig adhoc structure for persenting nats.ConsumerConfig

type APIRestRespConsumerInfo

type APIRestRespConsumerInfo struct {
	// Stream is the name of the stream
	Stream string `json:"stream_name" validate:"required"`
	// Name is the name of the consumer
	Name string `json:"name" validate:"required"`
	// Created is when this consumer was defined
	Created time.Time `json:"created" validate:"required"`
	// Config are the consumer config parameters
	Config APIRestRespConsumerConfig `json:"config" validate:"required"`
	// Delivered is the sequence number of the last message delivered
	Delivered APIRestRespSequenceInfo `json:"delivered" validate:"required"`
	// AckFloor is the sequence number of the last received ACKed
	//
	// For messages which failed to be ACKed (retry limit reached), the floor moves up to
	// include these message sequence numbers indicating these messages will not be retried.
	AckFloor APIRestRespSequenceInfo `json:"ack_floor" validate:"required"`
	// NumAckPending is the number of ACK pending / messages in-flight
	NumAckPending int `json:"num_ack_pending" validate:"required"`
	// NumRedelivered is the number of messages redelivered
	NumRedelivered int `json:"num_redelivered" validate:"required"`
	// NumWaiting NATS JetStream does not clearly document this
	NumWaiting int `json:"num_waiting" validate:"required"`
	// NumPending is the number of message to be delivered for this consumer
	NumPending uint64 `json:"num_pending" validate:"required"`
}

APIRestRespConsumerInfo adhoc structure for persenting nats.ConsumerInfo

type APIRestRespDataMessage

type APIRestRespDataMessage struct {
	goutils.RestAPIBaseResponse
	dataplane.MsgToDeliver
}

APIRestRespDataMessage wrapper object for one message from a stream

type APIRestRespOneJetStream

type APIRestRespOneJetStream struct {
	goutils.RestAPIBaseResponse
	// Stream the details for this stream
	Stream APIRestRespStreamInfo `json:"stream,omitempty"`
}

APIRestRespOneJetStream response for listing one stream

type APIRestRespOneJetStreamConsumer

type APIRestRespOneJetStreamConsumer struct {
	goutils.RestAPIBaseResponse
	// Consumer the details regarding this consumer
	Consumer APIRestRespConsumerInfo `json:"consumer,omitempty"`
}

APIRestRespOneJetStreamConsumer response for listing one consumer

type APIRestRespSequenceInfo

type APIRestRespSequenceInfo struct {
	// Consumer is consumer level sequence number
	Consumer uint64 `json:"consumer_seq" validate:"required"`
	// Stream is stream level sequence number
	Stream uint64 `json:"stream_seq" validate:"required"`
	// Last timestamp when these values updated
	Last *time.Time `json:"last_active,omitempty"`
}

APIRestRespSequenceInfo adhoc structure for persenting nats.SequenceInfo

type APIRestRespStreamConfig

type APIRestRespStreamConfig struct {
	// Name is the stream name
	Name string `json:"name" validate:"required"`
	// Description is an optional description of the stream
	Description string `json:"description,omitempty"`
	// Subjects is the list subjects this stream is listening on
	Subjects []string `json:"subjects,omitempty"`
	// MaxConsumers is the max number of consumers allowed on the stream
	MaxConsumers int `json:"max_consumers" validate:"required"`
	// MaxMsgs is the max number of messages the stream will store.
	//
	// Oldest messages are removed once limit breached.
	MaxMsgs int64 `json:"max_msgs" validate:"required"`
	// MaxBytes is the max number of message bytes the stream will store.
	//
	// Oldest messages are removed once limit breached.
	MaxBytes int64 `json:"max_bytes" validate:"required"`
	// MaxBytes is the max duration (ns) the stream will store a message
	//
	// Messages breaching the limit will be removed.
	MaxAge time.Duration `json:"max_age" swaggertype:"primitive,integer" validate:"required"`
	// MaxMsgsPerSubject is the maximum number of subjects allowed on this stream
	MaxMsgsPerSubject int64 `json:"max_msgs_per_subject" validate:"required"`
	// MaxMsgSize is the max size of a message allowed in this stream
	MaxMsgSize int32 `json:"max_msg_size,omitempty"`
}

APIRestRespStreamConfig adhoc structure for persenting nats.StreamConfig

type APIRestRespStreamInfo

type APIRestRespStreamInfo struct {
	// Config is the stream config parameters
	Config APIRestRespStreamConfig `json:"config" validate:"required"`
	// Created is the stream creation timestamp
	Created time.Time `json:"created" validate:"required"`
	// State is the stream current state
	State APIRestRespStreamState `json:"state" validate:"required"`
}

APIRestRespStreamInfo adhoc structure for persenting nats.StreamInfo

type APIRestRespStreamState

type APIRestRespStreamState struct {
	// Msgs is the number of messages in the stream
	Msgs uint64 `json:"messages" validate:"required"`
	// Bytes is the number of message bytes in the stream
	Bytes uint64 `json:"bytes" validate:"required"`
	// FirstSeq is the oldest message sequence number on the stream
	FirstSeq uint64 `json:"first_seq" validate:"required"`
	// FirstTime is the oldest message timestamp on the stream
	FirstTime time.Time `json:"first_ts" validate:"required"`
	// LastSeq is the newest message sequence number on the stream
	LastSeq uint64 `json:"last_seq" validate:"required"`
	// LastTime is the newest message timestamp on the stream
	LastTime time.Time `json:"last_ts" validate:"required"`
	// Consumers number of consumers on the stream
	Consumers int `json:"consumer_count" validate:"required"`
}

APIRestRespStreamState adhoc structure for persenting nats.StreamState

type MethodHandlers

type MethodHandlers map[string]http.HandlerFunc

MethodHandlers DICT of method-endpoint handler

Jump to

Keyboard shortcuts

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