建立 FIDL 程式庫

必要條件

本教學課程預期您已完成 GET 。個人中心 應該熟悉在 Fuchsia 上執行元件,如 範例元件

總覽

在這個教學課程中,您將定義並建構 FIDL 程式庫 examples.keyvaluestore.baseline。完成後,你將瞭解如何撰寫 安裝 FIDL 檔案、設定必要的 GN 規則,以及建構 FIDL 繫結。

您可以在以下網址找到本教學課程的完整原始碼: //examples/fidl/new/key_value_store/baseline/fidl/

定義 FIDL 程式庫

首先,請執行下列指令,為本教學課程建立目錄 透過 Fuchsia 結帳:

mkdir -p vendor/fidl-tutorials/building-fidl

建立新檔案 key_value_store.test.fidl

touch vendor/fidl-tutorials/building-fidl/key_value_store.test.fidl

FIDL 檔案名稱使用 .fidl 副檔名。類似於 C 標頭檔案,FIDL 檔案 定義資料類型並宣告功能介面這些宣告用於 與 FIDL 特定資料類型搭配使用,以便在 FIDL 端點之間通訊。

key_value_store.test.fidl 中新增下列 FIDL 程式碼:

// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library examples.keyvaluestore.baseline;

/// An item in the store. The key must match the regex `^[A-z][A-z0-9_\.\/]{2,62}[A-z0-9]$`. That
/// is, it must start with a letter, end with a letter or number, contain only letters, numbers,
/// periods, and slashes, and be between 4 and 64 characters long.
type Item = struct {
    key string:128;
    value vector<byte>:64000;
};

/// An enumeration of things that may go wrong when trying to write a value to our store.
type WriteError = flexible enum {
    UNKNOWN = 0;
    INVALID_KEY = 1;
    INVALID_VALUE = 2;
    ALREADY_EXISTS = 3;
};

/// A very basic key-value store - so basic, in fact, that one may only write to it, never read!
@discoverable
open protocol Store {
    /// Writes an item to the store.
    flexible WriteItem(struct {
        attempt Item;
    }) -> () error WriteError;
};

這個 FIDL 定義了 Item 類型,用於代表商店中的商品,也就是 WriteError 列舉列出已知寫入錯誤的已知錯誤,以及一個含有一種方法的 Store 通訊協定: WriteItem。根據定義,這個程式庫只能將值寫入儲存庫,但 鍵/值儲存庫範例係列,您將擴充這個程式庫,以支援 巢狀結構儲存、讀取值及其他功能

為 FIDL 程式庫建立 GN 目標

定義 FIDL 後,您需要建立另一個 gn 目標 程式碼可能會依附於

建立新檔案 BUILD.gn

touch vendor/fidl-tutorials/building-fidl/BUILD.gn

並新增下列建構規則:

# Copyright 2022 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/fidl/fidl.gni")

# Builds the FIDL library into a set of language specific bindings. Bindings for a given language
# may be imported by depending on this target, followed by a language-specific underscore:
#
#   ":examples.keyvaluestore.baseline_rust"
#   ":examples.keyvaluestore.baseline_cpp"
#   ...and so on
#
fidl("examples.keyvaluestore.baseline") {
  sources = [ "key_value_store.test.fidl" ]
  excluded_checks = [ "wrong-prefix-for-platform-source-library" ]
}

gn 範本 fidl("examples.keyvaluestore.baseline") 建立必要目標,以便透過其他程式碼使用這個程式庫。

編譯 FIDL 程式庫

如要建立新的 FIDL 程式庫,請執行下列 fx set 指令:

fx set core.x64\
  --with //vendor/fidl-tutorials/building-fidl:examples.keyvaluestore.baseline_rust\
  --with //vendor/fidl-tutorials/building-fidl:examples.keyvaluestore.baseline_cpp

這個指令會設定 fx build 以產生信任和 cpp 繫結。

接下來,建構程式碼:

fx build

探索產生的繫結

現在程式碼已建構完成,您可以探索系統為 繫結。如要查看產生的程式碼,請瀏覽下列目錄:

繫結類型 目錄
鐵鏽色 //out/default/fidling/gen/vendor/fidl-tutorials/building-fidl/examples.keyvaluestore.baseline/rust/
新版 c++ //out/default/fidling/gen/vendor/fidl-tutorials/building-fidl/examples.keyvaluestore.baseline/cpp/fidl/examples.keyvaluestore.baseline/cpp/

詳情請參閱產生的程式碼

後續步驟

完成本教學課程後,您現在可以探索 鍵/值儲存庫範例係列