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.
112 lines
3.6 KiB
112 lines
3.6 KiB
9 years ago
|
// Copyright (c) 2014 The btcsuite developers
|
||
|
// Use of this source code is governed by an ISC
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package btcjson
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
// ErrorCode identifies a kind of error. These error codes are NOT used for
|
||
|
// JSON-RPC response errors.
|
||
|
type ErrorCode int
|
||
|
|
||
|
// These constants are used to identify a specific RuleError.
|
||
|
const (
|
||
|
// ErrDuplicateMethod indicates a command with the specified method
|
||
|
// already exists.
|
||
|
ErrDuplicateMethod ErrorCode = iota
|
||
|
|
||
|
// ErrInvalidUsageFlags indicates one or more unrecognized flag bits
|
||
|
// were specified.
|
||
|
ErrInvalidUsageFlags
|
||
|
|
||
|
// ErrInvalidType indicates a type was passed that is not the required
|
||
|
// type.
|
||
|
ErrInvalidType
|
||
|
|
||
|
// ErrEmbeddedType indicates the provided command struct contains an
|
||
|
// embedded type which is not not supported.
|
||
|
ErrEmbeddedType
|
||
|
|
||
|
// ErrUnexportedField indiciates the provided command struct contains an
|
||
|
// unexported field which is not supported.
|
||
|
ErrUnexportedField
|
||
|
|
||
|
// ErrUnsupportedFieldType indicates the type of a field in the provided
|
||
|
// command struct is not one of the supported types.
|
||
|
ErrUnsupportedFieldType
|
||
|
|
||
|
// ErrNonOptionalField indicates a non-optional field was specified
|
||
|
// after an optional field.
|
||
|
ErrNonOptionalField
|
||
|
|
||
|
// ErrNonOptionalDefault indicates a 'jsonrpcdefault' struct tag was
|
||
|
// specified for a non-optional field.
|
||
|
ErrNonOptionalDefault
|
||
|
|
||
|
// ErrMismatchedDefault indicates a 'jsonrpcdefault' struct tag contains
|
||
|
// a value that doesn't match the type of the field.
|
||
|
ErrMismatchedDefault
|
||
|
|
||
|
// ErrUnregisteredMethod indicates a method was specified that has not
|
||
|
// been registered.
|
||
|
ErrUnregisteredMethod
|
||
|
|
||
|
// ErrMissingDescription indicates a description required to generate
|
||
|
// help is missing.
|
||
|
ErrMissingDescription
|
||
|
|
||
|
// ErrNumParams inidcates the number of params supplied do not
|
||
|
// match the requirements of the associated command.
|
||
|
ErrNumParams
|
||
|
|
||
|
// numErrorCodes is the maximum error code number used in tests.
|
||
|
numErrorCodes
|
||
|
)
|
||
|
|
||
|
// Map of ErrorCode values back to their constant names for pretty printing.
|
||
|
var errorCodeStrings = map[ErrorCode]string{
|
||
|
ErrDuplicateMethod: "ErrDuplicateMethod",
|
||
|
ErrInvalidUsageFlags: "ErrInvalidUsageFlags",
|
||
|
ErrInvalidType: "ErrInvalidType",
|
||
|
ErrEmbeddedType: "ErrEmbeddedType",
|
||
|
ErrUnexportedField: "ErrUnexportedField",
|
||
|
ErrUnsupportedFieldType: "ErrUnsupportedFieldType",
|
||
|
ErrNonOptionalField: "ErrNonOptionalField",
|
||
|
ErrNonOptionalDefault: "ErrNonOptionalDefault",
|
||
|
ErrMismatchedDefault: "ErrMismatchedDefault",
|
||
|
ErrUnregisteredMethod: "ErrUnregisteredMethod",
|
||
|
ErrMissingDescription: "ErrMissingDescription",
|
||
|
ErrNumParams: "ErrNumParams",
|
||
|
}
|
||
|
|
||
|
// String returns the ErrorCode as a human-readable name.
|
||
|
func (e ErrorCode) String() string {
|
||
|
if s := errorCodeStrings[e]; s != "" {
|
||
|
return s
|
||
|
}
|
||
|
return fmt.Sprintf("Unknown ErrorCode (%d)", int(e))
|
||
|
}
|
||
|
|
||
|
// Error identifies a general error. This differs from an RPCError in that this
|
||
|
// error typically is used more by the consumers of the package as opposed to
|
||
|
// RPCErrors which are intended to be returned to the client across the wire via
|
||
|
// a JSON-RPC Response. The caller can use type assertions to determine the
|
||
|
// specific error and access the ErrorCode field.
|
||
|
type Error struct {
|
||
|
ErrorCode ErrorCode // Describes the kind of error
|
||
|
Description string // Human readable description of the issue
|
||
|
}
|
||
|
|
||
|
// Error satisfies the error interface and prints human-readable errors.
|
||
|
func (e Error) Error() string {
|
||
|
return e.Description
|
||
|
}
|
||
|
|
||
|
// makeError creates an Error given a set of arguments.
|
||
|
func makeError(c ErrorCode, desc string) Error {
|
||
|
return Error{ErrorCode: c, Description: desc}
|
||
|
}
|