Expand description

Flow for managing ratelimit tickets.

Tickets are the Ratelimiter’s method of managing approval for a consumer to be able to send a request.

Ratelimit Consumer

1. Requesting a ticket

Consumers of a ratelimiter will call Ratelimiter::ticket.

2. Waiting for approval

In return consumers will receive a TicketReceiver. This must be polled in order to know when the ratelimiter has approved a ticket.

3. Receiving approval

When a ticket is approved and the future resolves, a TicketSender is provided. This must be used to provide the ratelimiter with the response’s ratelimit headers.

4. Performing the request

Consumers may now execute the HTTP request associated with the ticket. Once a response (or lack of one) is received, the headers must be parsed and sent to the ratelimiter via TicketSender::headers. This completes the cycle.

Ratelimiter

1. Initializing a ticket’s channels

Ratelimiters will accept a request for a ticket when Ratelimiter::ticket is called. You must call channel to create a channel between the ratelimiter and the consumer.

2. Keeping the consumer waiting

channel will return two halves: TicketNotifier and TicketReceiver. Ratelimiters must keep the notifier and give the user the receiver in return.

3. Notifying the consumer of ticket approval

When any ratelimits have passed and a user is free to perform their request, call TicketNotifier::available. If the user hasn’t canceled their request for a ticket, you will receive a TicketHeaders.

4. Receiving the response’s headers

The consumer will perform their HTTP request and parse the response’s headers. Once the headers (or lack of headers) are available the user will send them along the channel. Poll the provided TicketHeaders for those headers to complete the cycle.

Structs

Receiver to wait for the headers sent by the API consumer.

Indicate to the ratelimit consumer that their ticket has been granted and they may now send a request.

Channel receiver to wait for availability of a ratelimit ticket.

Channel sender to send response ratelimit information to the ratelimiter.

Functions

Produce a new channel consisting of a sender and receiver.