見出し画像

【完全保存版】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」を返す関数です。

その関数に対して、「?」演算子をつけています。

これにより、エラーが発生した場合には、型を変換した上で、返しています。

以上です。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊