Decorators
TypeSpec.Protobuf
@field
Defines the field index of a model property for conversion to a Protobuf message.
The field index of a Protobuf message must:
- fall between 1 and 229 - 1, inclusive.
- not fall within the implementation reserved range of 19000 to 19999, inclusive.
- not fall within any range that was [marked reserved](#
Target
ModelProperty
Parameters
Name | Type | Description |
---|---|---|
index | valueof uint32 | The whole-number index of the field. |
Examples
@message
Declares that a model is a Protobuf message.
Messages can be detected automatically if either of the following two conditions are met:
- The model has a
@field
annotation on all of its properties. - The model is referenced by any service operation.
This decorator will force the emitter to check and emit a model.
Target
{}
Parameters
None
@package
Declares that a TypeSpec namespace constitutes a Protobuf package. The contents of the namespace will be emitted to a single Protobuf file.
Target
Namespace
Parameters
Name | Type | Description |
---|---|---|
details | PackageDetails | the optional details of the package |
@reserve
Reserve a field index, range, or name. If a field definition collides with a reservation, the emitter will produce an error.
This decorator accepts multiple reservations. Each reservation is one of the following:
- a
string
, in which case the reservation refers to a field name. - a
uint32
, in which case the reservation refers to a field index. - a tuple
[uint32, uint32]
, in which case the reservation refers to a field range that is inclusive of both ends.
Unlike in Protobuf, where field name and index reservations must be separated, you can mix string and numeric field
reservations in a single @reserve
call in TypeSpec.
API Compatibility Note
Field reservations prevent users of your Protobuf specification from using the given field names or indices. This can be useful if a field is removed, as it will further prevent adding a new, incompatible field and will prevent users from utilizing the field index at runtime in a way that may break compatibility with users of older specifications.
See Protobuf Language Guide - Reserved Fields for more information.
Target
{}
Parameters
Name | Type | Description |
---|---|---|
reservations | valueof string | [uint32, uint32] | uint32[] | a list of field reservations |
Examples
@service
Declares that a TypeSpec interface constitutes a Protobuf service. The contents of the interface will be converted to
a service
declaration in the resulting Protobuf file.
Target
Interface
Parameters
None
@stream
Set the streaming mode of an operation. See StreamMode for more information.
Target
Operation
Parameters
Name | Type | Description |
---|---|---|
mode | StreamMode | The streaming mode to apply to this operation. |