RPC: Hides optional fields when inputting JSON
This commit is contained in:
parent
e75112d8e2
commit
25bc6bfc96
@ -28,7 +28,7 @@ type input = {
|
|||||||
|
|
||||||
(* generic JSON generation from a schema with callback for random or
|
(* generic JSON generation from a schema with callback for random or
|
||||||
interactive filling *)
|
interactive filling *)
|
||||||
let fill_in input schema =
|
let fill_in ?(show_optionals=true) input schema =
|
||||||
let rec element path { title ; kind }=
|
let rec element path { title ; kind }=
|
||||||
match kind with
|
match kind with
|
||||||
| Integer { minimum ; maximum } ->
|
| Integer { minimum ; maximum } ->
|
||||||
@ -73,6 +73,10 @@ let fill_in input schema =
|
|||||||
fill_loop [] 0 elts >>= fun acc ->
|
fill_loop [] 0 elts >>= fun acc ->
|
||||||
Lwt.return (`A (List.rev acc))
|
Lwt.return (`A (List.rev acc))
|
||||||
| Object { properties } ->
|
| Object { properties } ->
|
||||||
|
let properties =
|
||||||
|
if show_optionals
|
||||||
|
then properties
|
||||||
|
else (List.filter (fun (_, _, b, _) -> b) properties) in
|
||||||
let rec fill_loop acc ls =
|
let rec fill_loop acc ls =
|
||||||
match ls with
|
match ls with
|
||||||
| [] -> Lwt.return acc
|
| [] -> Lwt.return acc
|
||||||
@ -101,7 +105,7 @@ let fill_in input schema =
|
|||||||
in
|
in
|
||||||
element [] (Json_schema.root schema)
|
element [] (Json_schema.root schema)
|
||||||
|
|
||||||
let random_fill_in schema =
|
let random_fill_in ?(show_optionals=true) schema =
|
||||||
let display _ = Lwt.return () in
|
let display _ = Lwt.return () in
|
||||||
let int min max _ _ =
|
let int min max _ _ =
|
||||||
let max = Int64.of_int max
|
let max = Int64.of_int max
|
||||||
@ -115,7 +119,7 @@ let random_fill_in schema =
|
|||||||
let continue _ _ = Lwt.return (Random.int 4 = 0) in
|
let continue _ _ = Lwt.return (Random.int 4 = 0) in
|
||||||
Lwt.catch
|
Lwt.catch
|
||||||
(fun () ->
|
(fun () ->
|
||||||
fill_in
|
fill_in ~show_optionals
|
||||||
{ int ; float ; string ; bool ; display ; continue }
|
{ int ; float ; string ; bool ; display ; continue }
|
||||||
schema >>= fun json ->
|
schema >>= fun json ->
|
||||||
Lwt.return (Ok json))
|
Lwt.return (Ok json))
|
||||||
@ -123,11 +127,11 @@ let random_fill_in schema =
|
|||||||
let msg = Printf.sprintf "Fill-in failed %s\n%!" (Printexc.to_string e) in
|
let msg = Printf.sprintf "Fill-in failed %s\n%!" (Printexc.to_string e) in
|
||||||
Lwt.return (Error msg))
|
Lwt.return (Error msg))
|
||||||
|
|
||||||
let editor_fill_in schema =
|
let editor_fill_in ?(show_optionals=true) schema =
|
||||||
let tmp = Filename.temp_file "tezos_rpc_call_" ".json" in
|
let tmp = Filename.temp_file "tezos_rpc_call_" ".json" in
|
||||||
let rec init () =
|
let rec init () =
|
||||||
(* write a temp file with instructions *)
|
(* write a temp file with instructions *)
|
||||||
random_fill_in schema >>= function
|
random_fill_in ~show_optionals schema >>= function
|
||||||
| Error msg -> Lwt.return (Error msg)
|
| Error msg -> Lwt.return (Error msg)
|
||||||
| Ok json ->
|
| Ok json ->
|
||||||
Lwt_io.(with_file ~mode:Output tmp (fun fp ->
|
Lwt_io.(with_file ~mode:Output tmp (fun fp ->
|
||||||
@ -343,12 +347,12 @@ let format url (cctxt : #Client_commands.logging_rpcs) =
|
|||||||
"No service found at this URL (but this is a valid prefix)\n%!" >>= fun () ->
|
"No service found at this URL (but this is a valid prefix)\n%!" >>= fun () ->
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
let fill_in schema =
|
let fill_in ?(show_optionals=true) schema =
|
||||||
let open Json_schema in
|
let open Json_schema in
|
||||||
match (root schema).kind with
|
match (root schema).kind with
|
||||||
| Null -> Lwt.return (Ok `Null)
|
| Null -> Lwt.return (Ok `Null)
|
||||||
| Any | Object { properties = [] } -> Lwt.return (Ok (`O []))
|
| Any | Object { properties = [] } -> Lwt.return (Ok (`O []))
|
||||||
| _ -> editor_fill_in schema
|
| _ -> editor_fill_in ~show_optionals schema
|
||||||
|
|
||||||
let display_answer (cctxt : #Client_commands.full_context) = function
|
let display_answer (cctxt : #Client_commands.full_context) = function
|
||||||
| `Ok json ->
|
| `Ok json ->
|
||||||
@ -376,7 +380,7 @@ let call raw_url (cctxt : #Client_commands.full_context) =
|
|||||||
cctxt#generic_json_call `POST uri >>=?
|
cctxt#generic_json_call `POST uri >>=?
|
||||||
display_answer cctxt
|
display_answer cctxt
|
||||||
| { input = Some input } ->
|
| { input = Some input } ->
|
||||||
fill_in input >>= function
|
fill_in ~show_optionals:false input >>= function
|
||||||
| Error msg ->
|
| Error msg ->
|
||||||
cctxt#error "%s" msg >>= fun () ->
|
cctxt#error "%s" msg >>= fun () ->
|
||||||
return ()
|
return ()
|
||||||
|
Loading…
Reference in New Issue
Block a user