summaryrefslogtreecommitdiff
path: root/test/test_nest.ml
blob: f741b2e516354f83343037807554137cfd1b0175 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
open Cmdliner

let kind =
  let doc = "Kind of entity" in
  Arg.(value & opt (some string) None & info ["k";"kind"] ~doc)

let speed =
  let doc = "Movement $(docv) in m/s" in
  Arg.(value & opt int 2 & info ["speed"] ~doc ~docv:"SPEED")

let birds =
  let bird =
    let doc = "Use $(docv) specie." in
    Arg.(value & pos 0 string "pigeon" & info [] ~doc ~docv:"BIRD")
  in
  let fly =
    let info = Cmd.info "fly" ~doc:"Fly birds." in
    Cmd.v info Term.(const (fun n v -> ()) $ bird $ speed)
  in
  let land' =
    let info = Cmd.info "land" ~doc:"Land birds." in
    Cmd.v info Term.(const (fun n -> ()) $ bird)
  in
  let info = Cmd.info "birds" ~doc:"Operate on birds." in
  Cmd.group ~default:Term.(const (fun k -> ()) $ kind) info [fly; land']

let mammals =
  let man_xrefs = [`Main; `Cmd "birds" ] in
  let info = Cmd.info "mammals" ~doc:"Operate on mammals." ~man_xrefs in
  Cmd.v info Term.(const (fun () -> ()) $ const ())

let fishs =
  let name' =
    let doc = "Use fish named $(docv)." in
    Arg.(value & pos 0 (some string) None & info [] ~doc ~docv:"NAME")
  in
  let info = Cmd.info "fishs" ~doc:"Operate on fishs." in
  Cmd.v info Term.(const (fun n -> ()) $ name')

let camels =
  let herd =
    let doc = "Find in herd $(docv)." and docv = "HERD" in
    let deprecated = "deprecated, herds are ignored." in
    Arg.(value & pos 0 (some string) None & info [] ~deprecated ~doc ~docv)
  in
  let bactrian =
    let deprecated = "deprecated, use nothing instead." in
    let doc = "Specify a bactrian camel." in
    let env = Cmd.Env.info "BACTRIAN" ~deprecated in
    Arg.(value & flag & info ["bactrian"; "b"] ~deprecated ~env ~doc)
  in
  let deprecated = "deprecated, use 'mammals' instead."
  in
  let info = Cmd.info "camels" ~deprecated ~doc:"Operate on camels." in
  Cmd.v info Term.(const (fun n h -> ()) $ bactrian $ herd)

let cmd =
  let info = Cmd.info "test_nest" ~version:"X.Y.Z" in
  Cmd.group info [birds; mammals; fishs; camels]

let () = exit (Cmd.eval cmd)