Help improve this documentation
This documentation is still new and evolving. If you spot any mistakes, unclear explanations, or missing details, please open an issue.
Your feedback helps us improve!
ratelimit/ulule operatorsโ
This page lists all operators available in the ratelimit/ulule sub-package of ro.
Installโ
First, import the sub-package in your project:
go get -u github.com/samber/ro/plugins/ratelimit/ulule
NewRateLimiterโ
Rate limits observable values using ulule/limiter with custom key extraction.
import (
"time"
"github.com/samber/ro"
roratelimit "github.com/samber/ro/plugins/ratelimit/ulule"
"github.com/ulule/limiter"
)
rateLimiter, _ := limiter.New(limiter.Rate{
Period: time.Hour,
Limit: 100,
})
type Request struct {
UserID string
Action string
Timestamp time.Time
}
obs := ro.Pipe[Request, Request](
ro.Just(
Request{UserID: "user1", Action: "login"},
Request{UserID: "user2", Action: "login"},
Request{UserID: "user1", Action: "post"},
),
roratelimit.NewRateLimiter(rateLimiter, func(r Request) string {
return r.UserID // Rate limit per user
}),
)
sub := obs.Subscribe(ro.PrintObserver[Request]())
defer sub.Unsubscribe()
// Next: {UserID: user1, Action: login}
// Next: {UserID: user2, Action: login}
// Next: {UserID: user1, Action: post}
// CompletedPrototype:func NewRateLimiter[T any](limiter *limiter.Limiter, keyGetter func(T) string)