From 15ed76ebedd3803430059a13fe13c3319f147457 Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Tue, 29 Aug 2023 12:45:49 +0200 Subject: [PATCH] Use Result to return error when wallet creation fails Co-authored-by: Eric Mastro --- ethers/wallet.nim | 19 +++++++++---------- testmodule/testWallet.nim | 10 +++++----- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/ethers/wallet.nim b/ethers/wallet.nim index b234491..317dde0 100644 --- a/ethers/wallet.nim +++ b/ethers/wallet.nim @@ -30,16 +30,15 @@ proc new*(_: type Wallet, privateKey: PrivateKey, provider: Provider): Wallet = let wallet = Wallet.new(privateKey) wallet.provider = some provider wallet -proc new*(_: type Wallet, privateKey: string): ?Wallet = - if key =? PrivateKey.fromHex(privateKey): - some Wallet.new(key) - else: - none Wallet -proc new*(_: type Wallet, privateKey: string, provider: Provider): ?Wallet = - if key =? PrivateKey.fromHex(privateKey): - some Wallet.new(key, provider) - else: - none Wallet +proc new*(_: type Wallet, privateKey: string): ?!Wallet = + let keyResult = PrivateKey.fromHex(privateKey) + if keyResult.isErr: + return failure newException(WalletError, "invalid key: " & $keyResult.error) + success Wallet.new(keyResult.get()) +proc new*(_: type Wallet, privateKey: string, provider: Provider): ?!Wallet = + let wallet = ? Wallet.new(privateKey) + wallet.provider = some provider + success wallet proc connect*(wallet: Wallet, provider: Provider) = wallet.provider = some provider proc createRandom*(_: type Wallet): Wallet = diff --git a/testmodule/testWallet.nim b/testmodule/testWallet.nim index c19692f..703ccf5 100644 --- a/testmodule/testWallet.nim +++ b/testmodule/testWallet.nim @@ -21,20 +21,20 @@ suite "Wallet": await provider.close() test "Can create Wallet with private key": - check isSome Wallet.new(pk1) + check isSuccess Wallet.new(pk1) discard Wallet.new(PrivateKey.fromHex(pk1).get) test "Private key can start with 0x": - check isSome Wallet.new("0x" & pk1) + check isSuccess Wallet.new("0x" & pk1) test "Can create Wallet with provider": let provider = JsonRpcProvider.new() - check isSome Wallet.new(pk1, provider) + check isSuccess Wallet.new(pk1, provider) discard Wallet.new(PrivateKey.fromHex(pk1).get, provider) test "Cannot create wallet with invalid key string": - check isNone Wallet.new("0xInvalidKey") - check isNone Wallet.new("0xInvalidKey", JsonRpcProvider.new()) + check isFailure Wallet.new("0xInvalidKey") + check isFailure Wallet.new("0xInvalidKey", JsonRpcProvider.new()) test "Can connect Wallet to provider": let wallet = !Wallet.new(pk1)