/**
* Throttles the chunks of this stream according to the given bandwidth
* parameters using the token bucket algorithm. Allows for burst in the
* processing of elements by allowing the token bucket to accumulate tokens up
* to a `units + burst` threshold. Chunks that do not meet the bandwidth
* constraints are dropped. The weight of each chunk is determined by the
* `costFn` function.
*
* @tsplus static effect/core/stream/Stream.Aspects throttleEnforce
* @tsplus pipeable effect/core/stream/Stream throttleEnforce
*/
export function throttleEnforce(
units: number,
duration: Duration,
costFn: (input: Chunk) => number,
burst = 0
) {
return (self: Stream): Stream =>
self.throttleEnforceEffect(
units,
duration,
(input) => Effect.succeed(costFn(input)),
burst
)
}