aboutsummaryrefslogtreecommitdiff
path: root/aoc2023/build/packages/glint/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'aoc2023/build/packages/glint/README.md')
-rw-r--r--aoc2023/build/packages/glint/README.md104
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
+
+[![Hex Package](https://img.shields.io/hexpm/v/glint?color=ffaff3&label=%F0%9F%93%A6)](https://hex.pm/packages/glint)
+[![Hex.pm](https://img.shields.io/hexpm/dt/glint?color=ffaff3)](https://hex.pm/packages/glint)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3?label=%F0%9F%93%9A)](https://hexdocs.pm/glint/)
+[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/tanklesxl/glint/main)](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())
+}
+```