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 )