glint

Hex Package Hex.pm Hex Docs GitHub Workflow Status

Gleam command line argument parsing with basic flag support.

Installation

To install from hex:

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
  2. configure it with glint.with_pretty_help and other configuration functions
  3. add commands with glint.add
  4. create a new command with glint.command
  5. assign that command any flags required
  6. assign the command a custom description
  7. run your cli with glnt.run, run with a function to handle command output with glint.run_and_handle

✨ Complementary packages

Glint works amazingly with these other packages:

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

// stdlib imports
import gleam/io
import gleam/list
import gleam/result
import gleam/string.{uppercase}
// external dep imports
import snag
import argv
// glint imports
import glint
import glint/flag


// this function returns the builder for the caps flag
fn caps_flag() -> flag.FlagBuilder(Bool) {
 flag.bool()
 |> flag.default(False)
 |> flag.description("Capitalize the hello message")
}

/// the glint command that will be executed
///
fn hello() -> glint.Command(Nil) {
 use <- glint.description("Prints Hello, <NAME>!")
 use caps <- glint.flag("caps",caps_flag())
 use _, args, flags <- glint.command()
 let assert Ok(caps) = caps(flags)
 let name = case 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(at: [], do: hello)
 // execute given arguments from stdin
 |> glint.run(argv.load().arguments)
}
Search Document