package server-reason-react
Source file Js_dict.ml
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 31 32 33 34 35 36 37(** Provide utilities for JS dictionary object *) type key = string type 'a t = (key, 'a) Hashtbl.t let empty () : 'a t = Hashtbl.create 10 let entries (dict : 'a t) : (string * 'a) array = Hashtbl.fold (fun k v acc -> (k, v) :: acc) dict [] |> Stdlib.Array.of_list let get (dict : 'a t) (k : key) : 'a option = try Some (Hashtbl.find dict k) with Not_found -> None let map ~(f : 'a -> 'b) (dict : 'a t) = Hashtbl.fold (fun k v acc -> Hashtbl.add acc k (f v); acc) dict (empty ()) let set (dict : 'a t) (k : key) (x : 'a) : unit = Hashtbl.replace dict k x let fromList (lst : (key * 'a) list) : 'a t = let length = Stdlib.List.length lst in let dict = Hashtbl.create length in Stdlib.List.iter (fun (k, v) -> Hashtbl.add dict k v) lst; dict let fromArray (arr : (key * 'a) array) : 'a t = let length = Stdlib.Array.length arr in let dict = Hashtbl.create length in Stdlib.Array.iter (fun (k, v) -> Hashtbl.add dict k v) arr; dict let keys (dict : 'a t) = Hashtbl.fold (fun k _ acc -> k :: acc) dict [] |> Stdlib.Array.of_list let values (dict : 'a t) = Hashtbl.fold (fun _k value acc -> value :: acc) dict [] |> Stdlib.Array.of_list let unsafeGet (dict : 'a t) (k : key) : 'a = Hashtbl.find dict k let unsafeDeleteKey (dict : 'a t) (key : key) = Hashtbl.remove dict key