Add poc files
This commit is contained in:
parent
30da2412e3
commit
fa600b98f7
220 changed files with 45679 additions and 0 deletions
51
external/jsonwheel/json_in.ml
vendored
Normal file
51
external/jsonwheel/json_in.ml
vendored
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
type t = Json_type.t
|
||||
open Json_type
|
||||
|
||||
|
||||
let filter_result x =
|
||||
Browse.assert_object_or_array x;
|
||||
x
|
||||
|
||||
|
||||
let check_channel_is_utf8 ic =
|
||||
let start = pos_in ic in
|
||||
let encoding =
|
||||
try
|
||||
let c1 = input_char ic in
|
||||
let c2 = input_char ic in
|
||||
let c3 = input_char ic in
|
||||
let c4 = input_char ic in
|
||||
Json_lexer.detect_encoding c1 c2 c3 c4
|
||||
with End_of_file -> `UTF8 in
|
||||
if encoding <> `UTF8 then
|
||||
json_error "Only UTF-8 encoding is supported";
|
||||
(try seek_in ic start
|
||||
with _ -> json_error "Not a regular file")
|
||||
|
||||
(* from_channel and from_channel4 work
|
||||
only on seekable devices (regular files) *)
|
||||
let from_channel p recursive file ic =
|
||||
check_channel_is_utf8 ic;
|
||||
let lexbuf = Lexing.from_channel ic in
|
||||
Json_lexer.set_file_name lexbuf file;
|
||||
let j =
|
||||
Json_parser.main
|
||||
(Json_lexer.token p)
|
||||
lexbuf
|
||||
in
|
||||
if recursive then j
|
||||
else filter_result j
|
||||
|
||||
let load_json
|
||||
?allow_comments ?allow_nan ?big_int_mode ?(recursive = false)
|
||||
file =
|
||||
let ic = open_in file in
|
||||
let x =
|
||||
let p =
|
||||
Json_lexer.make_param ?allow_comments ?allow_nan ?big_int_mode () in
|
||||
try `Result (from_channel p recursive file ic)
|
||||
with e -> `Exn e in
|
||||
close_in ic;
|
||||
match x with
|
||||
`Result x -> x
|
||||
| `Exn e -> raise e
|
||||
Loading…
Add table
Add a link
Reference in a new issue