termite

package module
v0.13.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2023 License: MIT Imports: 0 Imported by: 0

README

Termite

docs build codecov

Termite is a collection of utilities for building CLI tools in Go.

A few things to note:

  • This is still a WIP. I'm in the process of extracting things here when I find reusable patterns that I'm repeating often. This probably won't be stable or useful for others for a while, so... use at your own risk 😬 (at least until a 1.0 release).
  • Some of these packages were inspired or copied from the GitHub CLI project. I'm a big fan ❤ and I've done my best to give proper attribution per the license. If anyone from that team feels I've misappropriated anything, please let me know and I'll try to make amends.

Install

go get github.com/twelvelabs/termite

Usage

package main

import (
    "github.com/twelvelabs/termite/api"
    "github.com/twelvelabs/termite/conf"
    "github.com/twelvelabs/termite/ui"
)

func main() {
    type Config struct {
        BaseURL string `default:"https://0.0.0.0/api/v1" validate:"required,url"`
        Debug   bool   `default:"true"`
    }

    // Loads and validates config values from ~/.config/my-app/config.yaml
    config, _ := conf.NewLoader(&Config{}, ConfigFile("my-app")).Load()
    client := api.NewRESTClient(&api.ClientOptions{
        BaseURL: config.BaseURL,
    })

    type APIResponse struct {
        Status string `json:"statusMessage"`
    }

    u := ui.NewUserInterface(ui.NewIOStreams())
    ok, _ := u.Confirm("Proceed?", true, "Some help text...")
    if ok {
        u.ProgressIndicator.Start("Requesting")
        resp := &APIResponse{}
        err := client.Get("/some/endpoint", resp)
        if err != nil {
            u.Out(u.FailureIcon() + " API failure: %v\n", err)
        } else {
            u.Out(u.InfoIcon() + " API success: %v\n", resp.Status)
        }
        u.ProgressIndicator.Stop()
    }
    u.Out(u.SuccessIcon() + " Done\n")
}

Output:

? Proceed? Yes
• API success: some status message
✓ Done

Development

git clone git@github.com:twelvelabs/termite.git
cd termite

make setup
make build
make test

# Show full usage
make

Documentation

Overview

Package termite is a collection of utilities for building CLI tools in Go.

Directories

Path Synopsis
Package api provides wrappers around net/http types that support stubbing.
Package api provides wrappers around net/http types that support stubbing.
Package conf contains tools for managing app configuration.
Package conf contains tools for managing app configuration.
Package run provides wrappers around os/exec types that support stubbing.
Package run provides wrappers around os/exec types that support stubbing.
Package validate is a light wrapper around the [validator] library that configures it for english translation.
Package validate is a light wrapper around the [validator] library that configures it for english translation.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL