
Photo by
mitsuki_haruta
【完全保存版】Openbrushでのカスタムエラーとその他の方のエラーとの整合性について
0 はじめに
下のように、一つの関数内に、異なるErrorタイプを返す箇所があると仮定します。
上は「ContractError」を、下は「PSP34Error」を返します。

その結果、どちらかが返り値の型と不整合になります。
この場合、結論として、「PSP34Error」を「ContractError」に変換する必要があります。
1 変換処理の実装について
1 Fromトレイトの実装
ここで「From」トレイトを実装しているということがわかります。

2 型の変換について
この部分で、「PSP34Error」から「ContractError」に変換することを表しています。

3 from関数について
ここで、「from」関数を実装しているということがわかります。

4 引数について
ここで「_」という変数名で「PSP34Error」という型の引数を取っていることがわかります。
ちなみに、「_」はこの引数を使用しないということを表します。

5 Selfについて
このSelfは実装する型を表します。
ここでは、ContractErrorを表しています。

6 実際の処理について
上で、Selfが「ContractError」でしたので、
「ContractError::PSP34Error」であることがわかります。
末尾に「;」がないので、「式」として、値を返しています。

つまり、こういうことになります。

これにより、「PSP34Error」は「ContrctError」の中のエラーになりました。
2 列挙型への設定
上のように、「PSP34Error」は「ContractError」の一つに含まれるので、下のように実装します。

3 実際の使用場面について
では、実際の使用場面を見てみましょう。
下の「set_full_status」が「PSP34Error」を返す関数です。

その関数に対して、「?」演算子をつけています。
これにより、エラーが発生した場合には、型を変換した上で、返しています。

以上です。
いいなと思ったら応援しよう!
