package protocol type CLIError struct { Code string ExitCode int Message string Err error } func (e *CLIError) Error() string { return e.Message } func (e *CLIError) Unwrap() error { return e.Err } func NewCLIError(code string, exitCode int, message string, err error) error { return &CLIError{ Code: code, ExitCode: exitCode, Message: message, Err: err, } } func InvalidInput(message string, err error) error { return NewCLIError("invalid_input", 30, message, err) } func NoMatchingWork(message string) error { return NewCLIError("no_matching_work", 10, message, nil) }