diff options
Diffstat (limited to 'aoc2023/build/packages/glint/README.md')
-rw-r--r-- | aoc2023/build/packages/glint/README.md | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/aoc2023/build/packages/glint/README.md b/aoc2023/build/packages/glint/README.md new file mode 100644 index 0000000..d6d5821 --- /dev/null +++ b/aoc2023/build/packages/glint/README.md @@ -0,0 +1,104 @@ +# glint + +[](https://hex.pm/packages/glint) +[](https://hex.pm/packages/glint) +[](https://hexdocs.pm/glint/) +[](https://github.com/tanklesxl/glint/actions) + +Gleam command line argument parsing with basic flag support. + +## Installation + +To install from hex: + +```sh +gleam add glint +``` + +## Usage + +### Glint's Core + +`glint` is conceptually quite small, your general flow will be: + +1. create a new glint instance with `glint.new` +1. configure it with `glint.with_pretty_help` and other configuration functions +1. add commands with `glint.add` + 1. create a new command with `glint.cmd` + 1. assign that command any flags required + 1. assign the command a custom description +1. run your cli with `glnt.run`, run with a function to handle command output with `glint.run_and_handle` + +### Mini Example + +You can import `glint` as a dependency and use it to build simple command-line applications like the following simplified version of the [the hello world example](https://github.com/TanklesXL/glint/tree/main/examples/hello/README.md) + +```gleam +// stdlib imports +import gleam/io +import gleam/list +import gleam/result +import gleam/string.{uppercase} +// external dep imports +import snag +// glint imports +import glint +import glint/flag +// erlang-specific imports + +@target(erlang) +import gleam/erlang.{start_arguments} + +/// the key for the caps flag +const caps = "caps" + +/// a boolean flag with default False to control message capitalization. +/// +fn caps_flag() -> flag.FlagBuilder(Bool) { + flag.bool() + |> flag.default(False) + |> flag.description("Capitalize the provided name") +} + +/// the command function that will be executed +/// +fn hello(input: glint.CommandInput) -> Nil { + let assert Ok(caps) = flag.get_bool(from: input.flags, for: caps) + + let name = + case input.args { + [] -> "Joe" + [name,..] -> name + } + + let msg = "Hello, " <> name <> "!" + + + case caps { + True -> uppercase(msg) + False -> msg + } + |> io.println +} + +pub fn main() { + // create a new glint instance + glint.new() + // with an app name of "hello", this is used when printing help text + |> glint.with_name("hello") + // with pretty help enabled, using the built-in colours + |> glint.with_pretty_help(glint.default_pretty_help()) + // with a root command that executes the `hello` function + |> glint.add( + // add the command to the root + at: [], + // create the command, add any flags + do: glint.command(hello) + // with flag `caps` + |> glint.flag(caps, caps_flag()) + // with a short description + |> glint.description("Prints Hello, <NAME>!"), + ) + |> glint.run(start_arguments()) +} +``` |