Documentation
¶
Index ¶
- Variables
- func AnySlice[T any](in []T) []any
- func ConvertSliceToAny[T any](ts []T) []any
- func ConvertStringSlicePtr[T ~string](ss []string) *[]T
- func Deref[T any](val *T) T
- func DerefStr[T ~string](val *T) string
- func ExpandPath(path string) string
- func GenerateSecurePassword(length int) (string, error)
- func IsCI() bool
- func Must[T any](v T, err error) T
- func PtrIfNonNil[T ~[]E, E any](val T) *T
- func ReadAll(ctx context.Context, stdin io.Reader) (string, error)
- func ReadLine(ctx context.Context, stdin io.Reader) (string, error)
- func SerializeToJSON(w io.Writer, v any) error
- func SerializeToYAML(w io.Writer, v any) error
- type Duration
Constants ¶
This section is empty.
Variables ¶
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.
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 ConvertSliceToAny ¶
ConvertSliceToAny converts a slice of some type to slice of any. Returns nil if the input slice is nil.
func ConvertStringSlicePtr ¶
ConvertStringSlicePtr converts a slice of strings to a pointer to another string-like type. Returns nil if the input slice is nil.
func ExpandPath ¶
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 ¶
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 PtrIfNonNil ¶
func PtrIfNonNil[T ~[]E, E any](val T) *T
func SerializeToYAML ¶
SerializeToYAML serializes data to YAML format.
This function first marshals to JSON, then unmarshals and encodes to YAML. This approach ensures that:
- Structs from third-party libraries or generated code that only include json: struct tags (without yaml: tags) are correctly marshaled
- JSON and YAML marshaling produce consistent output, both respecting the same json: tags and omitempty directives
Types ¶
type 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 ¶
Implements the encoding.TextMarshaler interface.
func (*Duration) UnmarshalText ¶
Implements the encoding.TextUnmarshaler interface.