package ppx_deriving_cmdliner
 sectionYPositions = computeSectionYPositions($el), 10)"
  x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
  >
  
  
On This Page
  
  
  Cmdliner.Term.t generator
Install
    
    dune-project
 Dependency
Authors
Maintainers
Sources
  
    
      v0.6.0.tar.gz
    
    
        
    
  
  
  
    
  
  
    
  
        sha256=858b040231bacc6cbf1028d92710d87dc1c19855541d9c9624a61bd378127edc
    
    
  md5=5a1050704c477f0ee46001cc2f4fe697
    
    
  doc/README.html
[@@deriving cmdliner]
deriving Cmdliner is the easiest way to get a command line interface.
It is also a ppx_deriving plugin that generates a Cmdliner Term for a given type.
Example
type params = {
  username: string;
  (** Your Github username *)
  api_key: string;
  (** Your Github API key *)
  command: string; [@pos 0] [@docv "CMD"]
  (** The Github API command to run *)
  dry_run: bool;
  (** Don't really run this command *)
  time_to_wait: float; [@default 0.]
  (** Just an example of another type *)
} [@@deriving cmdliner,show]
let _ =
  let term = Cmdliner.Term.(const show_params $ params_cmdliner_term ()) in
  let info = Cmdliner.Term.info Sys.argv.(0) in
  Cmdliner.Term.eval (term, info)Which gives you a CLI like the following:
NAME
       awesome-cli
SYNOPSIS
       awesome-cli [OPTION]... CMD
ARGUMENTS
       CMD (required)
            The Github API command to run
OPTIONS
       --api-key=STRING (required)
            Your Github API key
       --dry-run
            Don't really run this command
       --help[=FMT] (default=auto)
           Show this help in format FMT. The value FMT must be one of `auto',
           `pager', `groff' or `plain'. With `auto', the format is `pager` or
           `plain' whenever the TERM env var is `dumb' or undefined.
       --time-to-wait=FLOAT (absent=0.)
            Just an example of another type
       --username=STRING (required)
            Your Github usernameFeatures
Custom type support
Ppx_deriving_cmdliner supports arbitrary types via a cmdliner_converter interface. For example, the below two methods work for supporting M.t (from test/tests.ml)
module M = struct
  type t = int * int
  let fst (f,_) = f
  let snd (_,s) = s
  let of_string s =
    try
      let sepi = String.index s '|' in
      let fst = String.sub s 0 sepi in
      let snd = String.sub s (sepi+1) ((String.length s)-sepi-1) in
      Result.Ok (int_of_string fst, int_of_string snd)
    with _ -> Result.Error (`Msg (Printf.sprintf "Couldn't parse `%s`" s))
  let to_string t =
    Printf.sprintf "%d|%d" (fst t) (snd t)
  let cmdliner_converter =
    of_string,
    (fun fmt t -> Format.fprintf fmt "%s" (to_string t))
end
type custom_types = {
  foo: M.t; [@conv M.cmdliner_converter]
  bar: M.t;
} [@@deriving cmdliner]In short, a value of type string -> ('a, [ `Msg of string ]) Result.result) * 'a printer must be provided (or will be looked for under the name cmdliner_converter if the type is t, else type_name_cmdliner_converter) for the given type.
Attributes supported
- Docs: [@doc "Overwrites the docstring"],[@docs "SECTION TWO"],[@docv "VAL"]
- Environment variables: [@env "ENVNAME"],[@env.doc "Docs for the variable"],[@env.docs "SECTION ENVS"]
- Other: [@list_sep '@'],[@default 123],[@enum [("a", Foo); ("b", Bar)]],[@aka ["b";"another-flag-name"]],[@conv cmdliner_converter](cf. required argument toconvin Cmdliner),[@opt_all]only ona' listfields,[@term cmdliner_term]for assiging an arbitraryCmdliner.Term.tto a field.
 sectionYPositions = computeSectionYPositions($el), 10)"
  x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
  >
  
  
  On This Page