util

package
v0.22.0 Latest Latest
Warning

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

Go to latest
Published: Aug 26, 2026 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var IsTerminal = func(v any) bool {
	if f, ok := v.(*os.File); ok {
		return term.IsTerminal(int(f.Fd()))
	}
	return false
}

IsTerminal is a helper for detecting whether an io.Writer or io.Reader is an interactive terminal / TTY. It is a variable so that tests can override it.

View Source
var ReadPassword = func(ctx context.Context, stdin io.Reader) (string, error) {

	f, ok := stdin.(*os.File)
	if !ok {
		return "", errors.New("stdin is not a terminal")
	}

	state, err := term.GetState(int(f.Fd()))
	if err != nil {
		return "", fmt.Errorf("error getting current terminal state: %w", err)
	}
	defer term.Restore(int(f.Fd()), state)

	return readString(ctx, func() (string, error) {
		val, err := term.ReadPassword(int(f.Fd()))
		if err != nil {
			return "", err
		}
		return string(val), nil
	})
}

ReadPassword reads a password from stdin without echoing it. It is a variable so that tests can inject input (similar to IsTerminal), since the real implementation requires stdin to be an *os.File.

Functions

func AnySlice

func AnySlice[T any](in []T) []any

func ConvertSliceToAny

func ConvertSliceToAny[T any](ts []T) []any

ConvertSliceToAny converts a slice of some type to slice of any. Returns nil if the input slice is nil.

func ConvertStringSlicePtr

func ConvertStringSlicePtr[T ~string](ss []string) *[]T

ConvertStringSlicePtr converts a slice of strings to a pointer to another string-like type. Returns nil if the input slice is nil.

func Deref

func Deref[T any](val *T) T

func DerefStr

func DerefStr[T ~string](val *T) string

func ExpandPath

func ExpandPath(path string) string

ExpandPath expands environment variables and tilde in file paths. It handles: - Empty paths (returns empty string) - Environment variable expansion (e.g., $HOME/config) - Home directory expansion (e.g., ~/config or ~) - Path normalization for cross-platform compatibility

func GenerateSecurePassword

func GenerateSecurePassword(length int) (string, error)

GenerateSecurePassword generates a cryptographically secure random password

func IsCI

func IsCI() bool

IsCI determines if the current execution context is within a known CI/CD system. This is based on https://github.com/watson/ci-info/blob/HEAD/index.js.

func Must

func Must[T any](v T, err error) T

func PtrIfNonNil

func PtrIfNonNil[T ~[]E, E any](val T) *T

func ReadAll

func ReadAll(ctx context.Context, stdin io.Reader) (string, error)

func ReadLine

func ReadLine(ctx context.Context, stdin io.Reader) (string, error)

func SerializeToJSON

func SerializeToJSON(w io.Writer, v any) error

func SerializeToYAML

func SerializeToYAML(w io.Writer, v any) error

SerializeToYAML serializes data to YAML format.

This function first marshals to JSON, then unmarshals and encodes to YAML. This approach ensures that:

  1. Structs from third-party libraries or generated code that only include json: struct tags (without yaml: tags) are correctly marshaled
  2. JSON and YAML marshaling produce consistent output, both respecting the same json: tags and omitempty directives

Types

type Duration

type Duration struct {
	time.Duration
}

Duration is a wrapper around time.Duration that allows it to be marshalled to/from JSON via the standard duration string format.

func (Duration) MarshalText

func (d Duration) MarshalText() ([]byte, error)

Implements the encoding.TextMarshaler interface.

func (*Duration) UnmarshalText

func (d *Duration) UnmarshalText(b []byte) error

Implements the encoding.TextUnmarshaler interface.

Jump to

Keyboard shortcuts

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