decred.org/dcrwallet/v3@v3.1.0/internal/rpc/jsonrpc/errors.go (about)

     1  // Copyright (c) 2013-2015 The btcsuite developers
     2  // Copyright (c) 2016-2018 The Decred developers
     3  // Use of this source code is governed by an ISC
     4  // license that can be found in the LICENSE file.
     5  
     6  package jsonrpc
     7  
     8  import (
     9  	"fmt"
    10  
    11  	"decred.org/dcrwallet/v3/errors"
    12  	"github.com/decred/dcrd/dcrjson/v4"
    13  	"github.com/jrick/wsrpc/v2"
    14  )
    15  
    16  func convertError(err error) *dcrjson.RPCError {
    17  	switch err := err.(type) {
    18  	case *dcrjson.RPCError:
    19  		return err
    20  	case *wsrpc.Error:
    21  		return &dcrjson.RPCError{
    22  			Code:    dcrjson.RPCErrorCode(err.Code),
    23  			Message: err.Message,
    24  		}
    25  	}
    26  
    27  	code := dcrjson.ErrRPCWallet
    28  	var kind errors.Kind
    29  	if errors.As(err, &kind) {
    30  		switch kind {
    31  		case errors.Bug:
    32  			code = dcrjson.ErrRPCInternal.Code
    33  		case errors.Encoding:
    34  			code = dcrjson.ErrRPCInvalidParameter
    35  		case errors.Locked:
    36  			code = dcrjson.ErrRPCWalletUnlockNeeded
    37  		case errors.Passphrase:
    38  			code = dcrjson.ErrRPCWalletPassphraseIncorrect
    39  		case errors.NoPeers:
    40  			code = dcrjson.ErrRPCClientNotConnected
    41  		case errors.InsufficientBalance:
    42  			code = dcrjson.ErrRPCWalletInsufficientFunds
    43  		}
    44  	}
    45  	return &dcrjson.RPCError{
    46  		Code:    code,
    47  		Message: err.Error(),
    48  	}
    49  }
    50  
    51  func rpcError(code dcrjson.RPCErrorCode, err error) *dcrjson.RPCError {
    52  	return &dcrjson.RPCError{
    53  		Code:    code,
    54  		Message: err.Error(),
    55  	}
    56  }
    57  
    58  func rpcErrorf(code dcrjson.RPCErrorCode, format string, args ...interface{}) *dcrjson.RPCError {
    59  	return &dcrjson.RPCError{
    60  		Code:    code,
    61  		Message: fmt.Sprintf(format, args...),
    62  	}
    63  }
    64  
    65  // Errors variables that are defined once here to avoid duplication.
    66  var (
    67  	errUnloadedWallet = &dcrjson.RPCError{
    68  		Code:    dcrjson.ErrRPCWallet,
    69  		Message: "request requires a wallet but wallet has not loaded yet",
    70  	}
    71  
    72  	errRPCClientNotConnected = &dcrjson.RPCError{
    73  		Code:    dcrjson.ErrRPCClientNotConnected,
    74  		Message: "disconnected from consensus RPC",
    75  	}
    76  
    77  	errNoNetwork = &dcrjson.RPCError{
    78  		Code:    dcrjson.ErrRPCClientNotConnected,
    79  		Message: "disconnected from network",
    80  	}
    81  
    82  	errAccountNotFound = &dcrjson.RPCError{
    83  		Code:    dcrjson.ErrRPCWalletInvalidAccountName,
    84  		Message: "account not found",
    85  	}
    86  
    87  	errAddressNotInWallet = &dcrjson.RPCError{
    88  		Code:    dcrjson.ErrRPCWallet,
    89  		Message: "address not found in wallet",
    90  	}
    91  
    92  	errNotImportedAccount = &dcrjson.RPCError{
    93  		Code:    dcrjson.ErrRPCWallet,
    94  		Message: "imported addresses must belong to the imported account",
    95  	}
    96  
    97  	errNeedPositiveAmount = &dcrjson.RPCError{
    98  		Code:    dcrjson.ErrRPCInvalidParameter,
    99  		Message: "amount must be positive",
   100  	}
   101  
   102  	errWalletUnlockNeeded = &dcrjson.RPCError{
   103  		Code:    dcrjson.ErrRPCWalletUnlockNeeded,
   104  		Message: "wallet or account locked; use walletpassphrase or unlockaccount first",
   105  	}
   106  
   107  	errReservedAccountName = &dcrjson.RPCError{
   108  		Code:    dcrjson.ErrRPCInvalidParameter,
   109  		Message: "account name is reserved by RPC server",
   110  	}
   111  )