aboutsummaryrefslogtreecommitdiff
path: root/lib/rl.ml
blob: f0c15be20d3ae80321e3797d292c33debeb92871 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 default = { limit = 1; remaining = 1; reset = 0; }
let empty : t = RouteMap.empty
let update = RouteMap.update
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))