RFC6901 JSON Pointer implementation in OCaml using jsont

toplevel

+28 -10
+26 -4
src/top/jsont_pointer_top.ml
··· 2 2 3 3 Usage in toplevel: 4 4 #require "jsont-pointer.top";; 5 - #install_printer Jsont_pointer_top.nav_printer;; 6 - #install_printer Jsont_pointer_top.append_printer;; 7 - #install_printer Jsont_pointer_top.json_printer;; 8 - #install_printer Jsont_pointer_top.error_printer;; 5 + 6 + Printers are automatically installed when the library is loaded. 9 7 *) 10 8 11 9 let nav_printer ppf (p : Jsont_pointer.nav Jsont_pointer.t) = ··· 21 19 22 20 let error_printer ppf (e : Jsont.Error.t) = 23 21 Format.pp_print_string ppf (Jsont.Error.to_string e) 22 + 23 + (* Automatic printer installation *) 24 + 25 + let printers = 26 + [ "Jsont_pointer_top.nav_printer"; 27 + "Jsont_pointer_top.append_printer"; 28 + "Jsont_pointer_top.json_printer"; 29 + "Jsont_pointer_top.error_printer" ] 30 + 31 + let eval_string 32 + ?(print_outcome = false) ?(err_formatter = Format.err_formatter) str = 33 + let lexbuf = Lexing.from_string str in 34 + let phrase = !Toploop.parse_toplevel_phrase lexbuf in 35 + Toploop.execute_phrase print_outcome err_formatter phrase 36 + 37 + let rec install_printers = function 38 + | [] -> true 39 + | printer :: rest -> 40 + let cmd = Printf.sprintf "#install_printer %s;;" printer in 41 + eval_string cmd && install_printers rest 42 + 43 + let () = 44 + if not (install_printers printers) then 45 + Format.eprintf "Problem installing jsont-pointer printers@."
+2 -6
src/top/jsont_pointer_top.mli
··· 1 1 (** Toplevel printers for {!Jsont_pointer}, {!Jsont.json}, and {!Jsont.Error.t}. 2 2 3 - To use in the OCaml toplevel or utop: 3 + Printers are automatically installed when the library is loaded: 4 4 {[ 5 5 #require "jsont-pointer.top";; 6 - #install_printer Jsont_pointer_top.nav_printer;; 7 - #install_printer Jsont_pointer_top.append_printer;; 8 - #install_printer Jsont_pointer_top.json_printer;; 9 - #install_printer Jsont_pointer_top.error_printer;; 10 6 ]} 11 7 12 - After installation, JSON Pointers will display their structure: 8 + After loading, JSON Pointers will display their structure: 13 9 {[ 14 10 # Jsont_pointer.of_string_nav "/foo/0";; 15 11 - : Jsont_pointer.nav Jsont_pointer.t = [Mem "foo"; Nth 0]