Calculator ➕✖️➖➗
最終更新
役に立ちましたか?
最終更新
役に立ちましたか?
2023年5月に開催されたのプロジェクトをRust言語で試してみました。
Local Canisterへの配備まで実施した手順を記載します。
Rustのプロジェクト「day1」を作成します。cargo new
コマンドを--lib
オプションを付与して実行します。
生成されたファイルは以下の通りです。
を使用します。最新バージョンでよいかと思いますので、以下のように実行ます。
Canister上から関数が正しく呼び出させるようcrate-typeをcdylib
にします。
Canisterの定義を行います。
dfx.jsonの [canisters] > [day1] > [candid]項目に指定したファイルに、Canisterに配置するDappが提供する関数のI/Fを定義します。
cargo new
コマンドで生成されたlib.rsの中身をクリアして、day1用のプログラムを作成します。
add()
sub()
mul()
div()
reset()
see()
power()
sqrt()
floor()
Rustではソース内にUnitテストコードを含めて記述することができます。
TODO: 今回の範囲ではロジックにIC色は無いため、UnitテストはLocal canisterに配備せずそのまま実行する方法としましたが、Canisterに配置したテストの方法は未調査。
Local Canisterを起動します。
--background
オプションでサービス常駐でき、--clean
を付与すると真っ新な状態でLocal canisterを起動できます。
Cargo.lockがディレクトリに存在しない場合、dfx deploy
がエラーとなります。
その場合、たとえば、以下のように作成するとよいでしょう。
Cargo.lock
Cargo.toml
day1.did
dfx.json
src/lib.rs
dfx start
コマンドを実行すると.dfx
ディレクトリが作成されます。
cargo test
コマンドを実行するとtarget/debug
ディレクトリが作成されます。
dfx deploy
コマンドを実行するとtarget/release
ディレクトリ、およびtarget/wasm32-unknown-unknown
が作成されます。
dfx.jsonの記述に関する公式ドキュメントはが参考になります。
に相当するcandidを用意します。
と同じように、以下の関数を実装します。
Canister内部で保持するデータは、にもあるように、「thread_local!」内で管理すると良いようです。
assertによる一致判定を行う際、assert_eq!(expected, actual)
なのか、assert_eq!(actual, expected)
なのかはがありますが、Rust公式ドキュメントののExamplesや、から、前者としています。