Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
28 lines (25 sloc) 773 Bytes
open Core.Std
open Async.Std
let run ~uppercase ~port =
let host_and_port =
Tcp.Server.create
~on_handler_error:`Raise
(Tcp.on_port port)
(fun _addr r w ->
Pipe.transfer (Reader.pipe r) (Writer.pipe w)
~f:(if uppercase then String.uppercase else Fn.id))
in
ignore (host_and_port : (Socket.Address.Inet.t, int) Tcp.Server.t Deferred.t);
Deferred.never ()
let () =
Command.async_basic
~summary:"Start an echo server"
Command.Spec.(
empty
+> flag "-uppercase" no_arg
~doc:" Convert to uppercase before echoing back"
+> flag "-port" (optional_with_default 8765 int)
~doc:" Port to listen on (default 8765)"
)
(fun uppercase port () -> run ~uppercase ~port)
|> Command.run