📦
cargo-component 0.9.0への移行
cargo-componentはバージョン0.9.0で、次のような破壊的な変更が入っています:
-
export
マクロの呼び出しが再び必要になりました - bitflagsのfeatureを有効にしたwit-bindgen-rtが必要になりました
- リソースの実装はコードの変更が必要です
- 次のCargo.tomlの属性が無効になっています
package.metadata.component.bindings.implementor
package.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