workers-rs ↗(場合によっては wasm-bindgen だけ)を使って WebAssembly で Workers を書くとき、Workers 上で動作することが確認されている主要な Rust crate を紹介します。
各 Rust crate の例には、必要なカスタム設定も記載しています。
これは網羅的な一覧ではありません。多くの Rust crate は、Workers が対応する wasm32-unknown-unknown ↗ ターゲットにコンパイルできます。
場合によっては、デフォルト機能を無効にするか、Wasm 固有の機能を有効にする必要があります。新しい依存関係を追加すると、Worker の サイズ が大きく増えることがある点に注意してください。
Wasm 向けに調整された多くの crate は、std::time の代わりに time crate を使います。time crate を Wasm で動かすには、JavaScript から時刻情報を取得するために wasm-bindgen 機能を有効にする必要があります。
トレーシングは、tracing-web crate と、tracing-subscriber の time 機能で有効にできます。
Workers には タイマーの制限 があるため、I/O を含まない span は開始時刻と終了時刻が同じになります。
詳細は tracing の例 ↗ を参照してください。
reqwest ライブラリ ↗ は Wasm にコンパイルでき、wasm-bindgen を使って JavaScript の fetch API に自動で接続します。
tokio-postgres は Wasm にコンパイルできます。workers-rs の Socket を使うよう設定する必要があります。
詳細は tokio-postgres の例 ↗ を参照してください。
hyper crate には、低レベルの conn モジュールと、より高レベルの Client という 2 つの HTTP クライアントがあります。
conn モジュールは Workers の Socket と一緒に使えます。一方 Client は、まだ Wasm 向けではないタイマー依存関係を必要とします。
詳細は hyper の例 ↗ を参照してください。