2020-02-12 16:33:19 +01:00
2020-02-12 16:33:19 +01:00
2020-02-12 16:31:01 +01:00
2020-02-12 16:33:19 +01:00
2020-01-29 17:51:57 +01:00
2020-02-12 16:33:19 +01:00

cli

A simple CLI library for Carp.

(load "https://veitheller.de/git/carpentry/cli@0.0.7")

(defn main []
  (let [p (=> (CLI.new @"My super cool tool!")
              (CLI.add &(CLI.int "flag" "f" "my flag" true))
              (CLI.add &(CLI.str "thing" "t" "my thing" false @"hi" &[@"a" @"b" @"hi"])))]
    (match (CLI.parse &p)
      (Result.Success flags)
        (println* &(str &(Map.get &flags "flag")) " " &(str &(Map.get &flags "thing")))
      (Result.Error msg) (do (IO.errorln &msg) (CLI.usage &p)))))

Installation

(load "https://veitheller.de/git/carpentry/cli@0.0.7")

Usage

CLI should be built using combinators, as in the example above. It has, as of now, three option types: integrals (longs), floating point numbers (doubles), and strings. They can be built using CLI.int, CLI.float, CLI.bool, and CLI.str, respectively. Their structure is always the same, except for booleans:

(CLI.int <long> <short> <description> <required?>)
; or
(CLI.int <long> <short> <description> <required?> <default>)
; or
(CLI.int <long> <short> <description> <required?> <default> <options-array>)

Youll have to set a default if you want to specify options, although you can set it to (Maybe.Nothing) if you want to make sure that it has to be set manually.

Booleans neither take defaults nor options. If a boolean flag receives a value, it will be read as true unless its the string false.

Once youre done building your flag structure, you can run CLI.parse. It will not abort the program on error, instead it will tell you what went wrong in a Result.Error. If it succeeds, the Result.Success contains a Map from the long flag name to the value. The values are not in the map if they are unset.


Have fun!

Description
A simple CLI library for Carp
https://veitheller.de/cli
Readme 70 KiB