From ebd49001ab9c844eaba52a19f6387dfb2a0da7af Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 13 Sep 2020 20:13:32 +0200 Subject: ucs: add command line parameters, powered by cmdliner Signed-off-by: Alban Gruin --- src/ucs.ml | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'src/ucs.ml') diff --git a/src/ucs.ml b/src/ucs.ml index cd5f018..a789ecf 100644 --- a/src/ucs.ml +++ b/src/ucs.ml @@ -15,5 +15,45 @@ * along with ucs. If not, see . *) +open Cmdliner + +let tcp = + (fun s -> + match int_of_string_opt s with + | Some p when p >= 0 && p < 65536 -> `Ok p + | Some p -> `Error (Printf.sprintf "invalid value `%d', expected a number \ + between 0 and 65535" p) + | None -> `Error (Printf.sprintf "invalid value `%s', expected an \ + integer" s)), + Format.pp_print_int + +let base_url = + let doc = "Base URL for this instance" in + Arg.(required & opt (some string) None & info ["b"; "base"] ~doc) + +let celcat_url = + let doc = "Celcat URL" in + Arg.(required & opt (some string) None & info ["c"; "celcat"] ~doc) + +let port = + let doc = "TCP port" in + Arg.(value & opt tcp 8080 & info ["p"; "port"] ~doc) + +let socket = + let doc = "UNIX socket" in + Arg.(value & opt (some string) None & info ["s"; "socket"] ~doc) + let () = - Lwt_main.run (Server.serve "/" (Uri.of_string "/") (`TCP (`Port 8080))) + let run base_url celcat_url port socket = + let celcat_uri = Uri.of_string celcat_url and + mode = match socket with + | Some s -> `Unix_domain_socket (`File s) + | None -> `TCP (`Port port) in + Lwt_main.run (Server.serve base_url celcat_uri mode) in + let cmd = + let doc = "micro celcatsanitizer: convert celcat \ + calendar to ICS files, on the fly." and + exits = Term.default_exits in + Term.(const run $ base_url $ celcat_url $ port $ socket), + Term.info "ucs" ~version:"0.1" ~doc ~exits in + Term.(exit @@ eval cmd) -- cgit v1.2.1