diff options
| author | Alban Gruin | 2020-09-13 20:13:32 +0200 | 
|---|---|---|
| committer | Alban Gruin | 2020-09-13 20:14:10 +0200 | 
| commit | ebd49001ab9c844eaba52a19f6387dfb2a0da7af (patch) | |
| tree | c7a896358f650ece575b23cb6e2e740b63cc8b3e | |
| parent | a262942eb56a962d20b3b34b637cd9cbea81b509 (diff) | |
ucs: add command line parameters, powered by cmdliner
Signed-off-by: Alban Gruin <alban at pa1ch dot fr>
| -rw-r--r-- | src/dune | 1 | ||||
| -rw-r--r-- | src/ucs.ml | 42 | 
2 files changed, 42 insertions, 1 deletions
| @@ -2,6 +2,7 @@   (name ucs)   (libraries astring              calendar +            cmdliner              cohttp-lwt-unix              ezjsonm              lwt.unix @@ -15,5 +15,45 @@   *    along with ucs.  If not, see <http://www.gnu.org/licenses/>.   *) +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) | 
