You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

93 lines
2.4 KiB

// Copyright 2017 Google Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package getopt
import "fmt"
// An Error is returned by Getopt when it encounters an error.
type Error struct {
ErrorCode // General reason of failure.
Err error // The actual error.
Parameter string // Parameter passed to option, if any
Name string // Option that cause error, if any
}
// Error returns the error message, implementing the error interface.
func (i *Error) Error() string { return i.Err.Error() }
// An ErrorCode indicates what sort of error was encountered.
type ErrorCode int
const (
NoError = ErrorCode(iota)
UnknownOption // an invalid option was encountered
MissingParameter // the options parameter is missing
ExtraParameter // a value was set to a long flag
Invalid // attempt to set an invalid value
)
func (e ErrorCode) String() string {
switch e {
case UnknownOption:
return "unknow option"
case MissingParameter:
return "missing argument"
case ExtraParameter:
return "unxpected value"
case Invalid:
return "error setting value"
}
return "unknown error"
}
// unknownOption returns an Error indicating an unknown option was
// encountered.
func unknownOption(name interface{}) *Error {
i := &Error{ErrorCode: UnknownOption}
switch n := name.(type) {
case rune:
if n == '-' {
i.Name = "-"
} else {
i.Name = "-" + string(n)
}
case string:
i.Name = "--" + n
}
i.Err = fmt.Errorf("unknown option: %s", i.Name)
return i
}
// missingArg returns an Error inidicating option o was not passed
// a required paramter.
func missingArg(o Option) *Error {
return &Error{
ErrorCode: MissingParameter,
Name: o.Name(),
Err: fmt.Errorf("missing parameter for %s", o.Name()),
}
}
// extraArg returns an Error inidicating option o was passed the
// unexpected paramter value.
func extraArg(o Option, value string) *Error {
return &Error{
ErrorCode: ExtraParameter,
Name: o.Name(),
Parameter: value,
Err: fmt.Errorf("unexpected parameter passed to %s: %q", o.Name(), value),
}
}
// setError returns an Error inidicating option o and the specified
// error while setting it to value.
func setError(o Option, value string, err error) *Error {
return &Error{
ErrorCode: Invalid,
Name: o.Name(),
Parameter: value,
Err: err,
}
}