📦
cargo-component 0.9.0への移行
cargo-componentはバージョン0.9.0で、次のような破壊的な変更が入っています:
-
exportマクロの呼び出しが再び必要になりました - bitflagsのfeatureを有効にしたwit-bindgen-rtが必要になりました
- リソースの実装はコードの変更が必要です
- 次のCargo.tomlの属性が無効になっています
package.metadata.component.bindings.implementorpackage.metadata.component.bindings.implementor
上記への対応を節を分けて説明します。
exportマクロの呼び出しを追加
0.7.0で不要になったexportマクロの呼び出しが必須となりました。呼び出さない場合、次のようなエラーが発生します:
error: module does not export required function `<name>`
lib.rsの末尾で次のようにexportマクロを呼び出すことで、上記のエラーを修正できます。なおComponentはコンポーネントを実装した構造体の名前です。自身の実装に合わせて置き換えてください。
bindings::export!(Component with_types_in bindings);
wit-bindgen-rtを依存するライブラリーに追加
以前はwit-bindgenで提供されていた関数のいくつかがwit-bindgen-rtに移されています。そのため、次のようなビルドエラーが発生するようになりました:
error[E0433]: failed to resolve: use of undeclared crate or module `wit_bindgen_rt`
--> rust-project/src/bindings.rs:17:5
|
17 | wit_bindgen_rt::maybe_link_cabi_realloc();
| ^^^^^^^^^^^^^^ use of undeclared crate or module `wit_bindgen_rt`
|
help: there is a crate or module with a similar name
|
17 | wit_bindgen::maybe_link_cabi_realloc();
| ~~~~~~~~~~~
上記のエラーは次のように依存するライブラリーを更新することで修正できます。
- wit-bindgenを削除
- wit-bindgen-rtを追加
- bitflasgsを追加
更新は次のようにコマンドで行えます:
% cargo remove wit-bindgen
% cargo add wit-bindgen-rt
% cargo add bitflags
リソースの実装コードの変更
次のようなリソースがあったとします:
以前は次のように実装していました。GuestMessage::get_messageがwit_bindgen::Resource<Message>であることに注意してください。
今回の更新によってwit_bindgen::Resourceが解決できなくなりました。これに伴い、次のようにコードを変更します。
-
use wit_bindgen::Resource;をコードから削除 -
use bindings::exports::component::composition::message_handlable::Message;を追加 -
GuestMessage::get_messageの返り値の型をMessageに変更し、型に合うようにコードを変更 -
Guestトレイトの実装にtype Message = MessageImpl;を追加
変更したコードは次のようになります:
Discussion