系統支援下列 FIDL 屬性:
@available
@deprecated
@discoverable
@doc
@generated_name
@no_doc
@selector
@transitional
@transport
@unknown
範圍
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
宣告中時才能使用。 必須是有效的資料庫名稱元素。省略時,則預設為 程式庫名稱的第一個元素added
、deprecated
、removed
、replaced
:必須是介於 1 至 1 之間的整數 2^31-1 (含),或其中一個特殊常數NEXT
和HEAD
。removed
和replaced
互斥,- 必須尊重
added <= deprecated < removed
或added <= deprecated < replaced
。
renamed
:只有在已提供removed
或replaced
的情況下才能使用。指定 新增或取代元素後的新名稱。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-0020。
selector 可以是原始方法的名稱 (例如 SomeMethod
),
或完整名稱。
可用於重新命名方法,而不會中斷 ABI 相容性。
舉例來說,如要將 Investigate
方法重新命名為 Experiment
在 Science
介面中,我們可以編寫:
protocol Science {
@selector("Investigate")
Experiment();
};
屬性也可用來處理從一種通訊協定變更為
或複製到另一個程式庫
或同時存取兩者例如,假設
fuchsia.examples.docs
程式庫中 Org
通訊協定的 Productionize
該函式原本在 Area120
通訊協定中命名為 Discover
,
purple.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
成員的用法後,該成員就會
不必要的事件。