open Core.Std
open Async.Std
open ArithRpc
let main host port () : unit Deferred.t =
let f conn : unit Deferred.t =
let eval req =
Rpc.Rpc.dispatch_exn eval_rpc conn req
in
eval (Request.Succ 42) >>= fun a ->
eval (Request.Neg (-42)) >>= fun b ->
eval (Request.Plus (40, 2)) >>= fun c ->
eval (Request.Sub (44, 2)) >>= fun d ->
eval (Request.Times (6, 7)) >>= fun e ->
eval (Request.Eq (42, 42)) >>= fun f ->
print_endline (Response.to_string a);
print_endline (Response.to_string b);
print_endline (Response.to_string c);
print_endline (Response.to_string d);
print_endline (Response.to_string e);
print_endline (Response.to_string f);
return ()
in
RpcUtil.with_rpc_connection f ~host ~port
let () =
Command.async
~summary:"Arith Client"
Command.Spec.(
empty
+> flag "-host" (required string) ~doc:"RPC server hostname"
+> flag "-port" (required int) ~doc:"RPC server port"
)
main
|> Command.run