FIDL 屬性

系統支援下列 FIDL 屬性:

範圍

FIDL 元素之前的屬性,例如:

@doc(" MyType summary\n")
type MyType = struct {

可以修改元素特性,或提供 說明文件。

語法

屬性可以包含值,且多個屬性可以堆疊,例如:

@discoverable
@transport("Channel")

說明這兩個層面:

  • 其中包含 @discoverable@transport 這兩個屬性。
  • @transport 屬性會採用下方列舉的值。

@available

USAGE@available(platform="字串", added=版本, deprecated=版本, removed=版本, replaced=版本, renamed="字串", note="字串")

MEANING: 所有引數皆為選用,但至少須提供一個引數。

  • platform:只有在屬性位於 library 宣告中時才能使用。 必須是有效的資料庫名稱元素。省略時,則預設為 程式庫名稱的第一個元素
  • addeddeprecatedremovedreplaced:必須是介於 1 至 1 之間的整數 2^31-1 (含),或其中一個特殊常數 NEXTHEAD
    • removedreplaced 互斥,
    • 必須尊重 added <= deprecated < removedadded <= deprecated < replaced
  • renamed:只有在已提供 removedreplaced 的情況下才能使用。指定 新增或取代元素後的新名稱。
  • note:只有在提供 deprecated 的情況下才能使用。應包含簡短摘要 說明適合改用哪些關鍵字 編譯器錯誤訊息。

詳情請參閱 FIDL 版本管理

@deprecated

USAGE@deprecated

MEANING: 請參閱 RFC-0058

@discoverable

USAGE@discoverable(name=name)

MEANING: 指派用於服務探索的名稱。這表示@discoverable 通訊協定和連線的用戶端 通訊協定就能搜尋相同的名稱這樣一來 用戶端會搜尋正確的名稱,而未手動確保 查詢名稱與伺服器端傳遞的名稱相符。

如果省略 name,系統會根據程式庫和通訊協定名稱產生名稱 (例如 some.library.SomeProtocol)。如果提供 name,則必須遵循 相同格式請注意,這「並非」完整名稱,因為 使用斜線 (例如 some.library/SomeProtocol)。

fuchsia.unknown/Queryable 也會使用 @discoverable 名稱啟用服務 對於型別清除的頻道,動態通訊協定解析。舉例來說 具有未指定類型的 Zircon 管道,但知道伺服器會實作 Queryable,可以使用 fuchsia.unknown/Queryable.Query 方法取得 具體的通訊協定類型

@doc

USAGE@doc("字串")

MEANING: 在 FIDL 中,註解的開頭可以是兩個 (「//」) 或三個斜線 (「///」), 也可以顯示在 @doc 屬性中 雙斜線變體不會將註解套用到已產生的 目標,而三斜線和 @doc 變體都有。

具體說明如下:

/// Foo
type WithThreeSlashes = struct {

@doc("Foo")
type WithAttribute = struct {

效果相同,其中一個 (「///」) 為另一種效果的語法糖。 留言文字是 產生的程式碼,且其與 目標語言

@generated_name

USAGE@generated_name("Foo")

MEANING:這項屬性是用來覆寫 fidlc 保留的名稱 任何內嵌版面配置的選項如果需要其他名稱,這個方法就很實用 (例如,為了避免名稱與其他類型衝突)。

舉例來說,下列程式碼會同時出現名稱衝突,因為 版面配置保留相同的 Options 名稱:

table StartupConfig {
  1: options table {
    ...
  };
  ...
};

table TeardownConfig {
  2: options table {
    ...
  };
};

區別兩者的方法之一是手動指定 產生的名稱:

table StartupConfig {
  1: options
  @generated_name("StartupOptions") table {
    ...
  };
  ...
};

table TeardownConfig {
  1: options
  @generated_name("TeardownOptions") table {
    ...
  };
  ...
};

@no_doc

USAGE@no_doc

MEANING: 這項屬性可用來標記應由說明文件略過的程式庫 和生成工具舉例來說,產生的 FIDL 會使用這項屬性 驅動程式繫結編譯器等程式庫。

@selector

USAGE@selector("選取器")

MEANING: 可讓您變更方法序數的雜湊基礎,請參閱 RFC-0020selector 可以是原始方法的名稱 (例如 SomeMethod), 或完整名稱

可用於重新命名方法,而不會中斷 ABI 相容性。 舉例來說,如要將 Investigate 方法重新命名為 ExperimentScience 介面中,我們可以編寫:

protocol Science {
    @selector("Investigate")
    Experiment();
};

屬性也可用來處理從一種通訊協定變更為 或複製到另一個程式庫 或同時存取兩者例如,假設 fuchsia.examples.docs 程式庫中 Org 通訊協定的 Productionize 該函式原本在 Area120 通訊協定中命名為 Discoverpurple.examples.docs 程式庫:

protocol Org {
    @selector("purple.examples.docs/Area120.Discover")
    Productionize();
};

@transitional

USAGE@transitional("說明")

MEANING: 指示繫結產生可成功建構的程式碼 是否實作該方法 RFC-0021 包含更多詳細資料。

@transport

USAGE@transport("tranportList")

MEANING: 可讓你選取傳輸方式。 請提供一份以半形逗號分隔的值清單,系統會從以下來源中選取:

  • Channel - 使用 Zircon 頻道
  • Syscall:指定通訊協定用於指定 定義 Zircon Scalls,而非一般的處理序間通訊 (IPC)。

如未指定,則預設值為 Channel。 如果您指定了一或多個值,系統只會採用這些值 (例如 指定 @transport("Foo") 會停用 Channel,且僅使用 Foo)。

@unknown

USAGE@unknown

MEANING@unknown 可放在列舉成員上,以表示該成員代表 特定的未知預留位置。這麼做是為了轉換嚴格列舉項目 額外為「未知」位成員 轉換為彈性列舉:為代表不明的成員加上註解 在轉換為彈性版本前,使用 @unknown 屬性能確保 系統會將 @unknown 成員視為不明資料,而非 。移除 @unknown 成員的用法後,該成員就會 不必要的事件。