aboutsummaryrefslogtreecommitdiff
path: root/lib/rl.ml
diff options
context:
space:
mode:
authorAdelyn Breelove <[email protected]>2018-12-13 14:11:23 -0700
committerAdelyn Breelove <[email protected]>2018-12-13 14:11:23 -0700
commitc848b9cc265f5ac2bcc70bd73e1cc8945d512e34 (patch)
tree4334a7749f7d0bb379690cfdcdd866689c2fb1e0 /lib/rl.ml
parentUpdate my name in disml.opam (diff)
downloaddisml-c848b9cc265f5ac2bcc70bd73e1cc8945d512e34.tar.xz
disml-c848b9cc265f5ac2bcc70bd73e1cc8945d512e34.zip
Add rate limit handling
Diffstat (limited to 'lib/rl.ml')
-rw-r--r--lib/rl.ml29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/rl.ml b/lib/rl.ml
new file mode 100644
index 0000000..316abcf
--- /dev/null
+++ b/lib/rl.ml
@@ -0,0 +1,29 @@
+open Core
+open Async
+
+module RouteMap = Map.Make(String)
+
+type rl = {
+ limit: int;
+ remaining: int;
+ reset: int;
+}
+
+type t = ((rl, read_write) Mvar.t) RouteMap.t
+
+let rl_of_header h =
+ let module C = Cohttp.Header in
+ match C.get h "X-RateLimit-Limit", C.get h "X-RateLimit-Remaining", C.get h "X-RateLimit-Reset" with
+ | Some lim, Some rem, Some re ->
+ let limit = Int.of_string lim in
+ let remaining = Int.of_string rem in
+ let reset = Int.of_string re in
+ Some { limit; remaining; reset; }
+ | _ -> None
+
+let update = RouteMap.update
+let empty : t = RouteMap.empty
+let find = RouteMap.find
+let find_exn m s = match find m s with
+ | Some r -> r
+ | None -> raise (Not_found_s (String.sexp_of_t s)) \ No newline at end of file