必要條件
在這個教學課程中,您將使用以下項目的 fuchsia.examples FIDL 程式庫:
建立 FIDL 程式庫教學課程。這個 FIDL 程式庫的程式碼
請參閱 //examples/fidl/fuchsia.examples。請花點時間
請先檢查程式碼,再繼續下個部分
總覽
本教學課程詳細說明如何透過 Rust 使用 FIDL 建立單元測試來做為「遊樂場」的 探索 Rust 繫結
本文件說明如何完成以下工作:
範例程式碼位於 Fuchsia 結帳時,
//examples/fidl/rust/fidl_crates/。如果想編寫完整的程式碼
按照本教學課程操作時,您可以移除範例程式碼:
rm -r examples/fidl/rust/fidl_crates/*
撰寫「Hello World」節目
- 將主要函式新增至 - examples/fidl/rust/fidl_crates/src/main.rs:- fn main() { println!("Hello, world!"); }
- 定義 - rustc_binary,然後透過- $host_toolchain為測試建立依附元件,這會為主機建構二進位檔。 若要執行此操作,請在- examples/fidl/rust/fidl_crates/BUILD.gn中新增以下內容:- import("//build/rust/rustc_binary.gni") rustc_binary("fidl_crates_bin") { edition = "2021" sources = [ "src/main.rs" ] } group("fidl_crates") { testonly = true deps = [ ":fidl_crates_bin($host_toolchain)" ] }
- 在建構中加入範例 - fx set core.x64 --with //examples/fidl/rust/fidl_crates
- 建構範例 - fx build
- 執行二進位檔 - out/default/host_x64/fidl_crates_bin- 畫面上應該會顯示 hello world 訊息。 
將 Rust FIDL 繫結新增為依附元件
針對每個 FIDL 程式庫宣告,包括編譯 FIDL 中的檔案。
含有該程式庫的 Rust 繫結程式碼的 FIDL Crate 會根據原始目標產生
名稱後方加上 _rust。
參照這個產生的 Crate,為 Rust 繫結新增依附元件。新的 rustc_binary
目標看起來應該像這樣:
rustc_binary("fidl_crates_bin") {
  edition = "2021"
  deps = [ "//examples/fidl/fuchsia.examples:fuchsia.examples_rust" ]
  sources = [ "src/main.rs" ]
}
(選用) 如要查看新產生的繫結:
- 使用 fx build重新建構。
- 切換到產生的檔案目錄:
out/default/fidling/gen/examples/fidl/fuchsia.examples/fuchsia.examples。產生的程式碼位於fidl_fuchsia_examples.rs。 如果您設定了其他建構輸出內容,可能需要變更out/default目錄。您可以使用cat .fx-build-dir檢查建構輸出目錄。
如要進一步瞭解如何找出產生的繫結程式碼,請參閱 查看產生的繫結程式碼。
在專案中使用 FIDL Rust Crate
新增測試,建立在系統產生的 FIDL Crate 中盡情玩耍 模組和預留位置測試:
#[cfg(test)]
mod test {
   #[test]
   fn fidl_crates_usage() {
   }
}
接著,您必須設定 with_unit_tests 引數,以測試方式建構:
rustc_binary("fidl_crates_bin") {
  edition = "2021"
  test_deps = [ "//examples/fidl/fuchsia.examples:fuchsia.examples_rust" ]
  with_unit_tests = true
  sources = [ "src/main.rs" ]
}
這樣就會產生 fidl_crates_bin_test 目標,並據此新增
傳送至建構群組:
group("fidl_crates") {
  testonly = true
  deps = [
    ":fidl_crates_bin($host_toolchain)",
    ":fidl_crates_bin_test($host_toolchain)",
  ]
}
如要匯入 Crate,請將以下內容新增至 tests 模組頂端。
為求簡潔,在 Fuchsia 樹狀圖中,FIDL Crate 通常會採用簡稱為簡短的名稱:
    use fidl_fuchsia_examples as fex;
使用產生的繫結程式碼
現在可以使用產生的繫結程式碼編寫一些程式碼。如要 如要瞭解繫結的相關資訊,請參閱 Rust 繫結參考資料。
你也可以使用下方的程式碼範例開始著手。您可以在
fidl_crates_usage 測試:
let flags = fex::FileMode::READ | fex::FileMode::WRITE;
println!("{:?}", flags);
let from_raw = fex::LocationType::from_primitive(1).expect("Could not create LocationType");
assert_eq!(from_raw, fex::LocationType::Museum);
assert_eq!(fex::LocationType::Restaurant.into_primitive(), 3);
let red = fex::Color { id: 0u32, name: "red".to_string() };
println!("{:?}", red);
let int_val = fex::JsonValue::IntValue(1);
let str_val = fex::JsonValue::StringValue("1".to_string());
println!("{:?}", int_val);
assert_ne!(int_val, str_val);
let user = fex::User { age: Some(20), ..Default::default() };
println!("{:?}", user);
assert!(user.age.is_some());
如要重新建構並重新執行測試,請執行以下指令:
fx test -vo fidl_crates_bin_test