2025-08-04 10:43:59 +03:00

21 lines
596 B
Nim

import std/[times, deques, options]
import chronos
type
BucketState* = object
budget*: int
budgetCap*: int
lastTimeFull*: Moment
QueueType* {.pure.} = enum
Critical = "critical"
Normal = "normal"
RateLimitStore* =
concept s
s.saveBucketState(BucketState) is Future[bool]
s.loadBucketState() is Future[Option[BucketState]]
s.addToQueue(QueueType, seq[tuple[msgId: string, msg: untyped]]) is Future[bool]
s.popFromQueue(QueueType) is Future[Option[seq[tuple[msgId: string, msg: untyped]]]]
s.getQueueLength(QueueType) is int