Skip to main content
Version: Next 🚧

Data types

TypeSpec.Protobuf

Extern

A model that represents an external Protobuf reference. This type can be used to import and utilize Protobuf declarations that are not declared in TypeSpec within TypeSpec sources. When the emitter encounters an Extern, it will insert an import statement for the corresponding Path and refer to the type by Name.

Usage

If you have a file called test.proto that declares a package named test and a message named Widget, you can use the Extern type to declare a model in TypeSpec that refers to your external definition of test.Widget. See the example below.

When the TypeSpec definition of Widget is encountered, the Protobuf emitter will represent it as a reference to test.Widget and insert an import for it, rather than attempt to convert the model to an equivalent message.

model TypeSpec.Protobuf.Extern<Path, Name>

Template Parameters

NameDescription
Paththe relative path to a .proto file to import
Namethe fully-qualified reference to the type this model represents within the .proto file

Examples

model Widget is Extern<"path/to/test.proto", "test.Widget">;

Properties

NameTypeDescription
_externnever

Map

A type representing a Protobuf map. Instances of this type in models will be converted to the built-in map type in Protobuf.

The key type of a Protobuf map must be any integral type or string. The value type can be any type other than another Map.

model TypeSpec.Protobuf.Map<Key, Value>

Template Parameters

NameDescription
Keythe key type (any integral type or string)
Valuethe value type (any type other than another map)

Properties

None

PackageDetails

Details applied to a package definition by the [@package](./decorators#

model TypeSpec.Protobuf.PackageDetails

Properties

NameTypeDescription
name?stringThe package's name.

By default, the package's name is constructed from the namespace it is applied to.
options?Record<string | boolean | numeric>The package's top-level options.

See the Protobuf Language Guide - Options for more information.

Currently, only string, boolean, and numeric options are supported.

StreamMode

The streaming mode of an operation. One of:

  • Duplex: both the input and output of the operation are streaming.
  • In: the input of the operation is streaming.
  • Out: the output of the operation is streaming.
  • None: neither the input nor the output are streaming.

See the [@stream](./decorators#

enum TypeSpec.Protobuf.StreamMode
NameValueDescription
DuplexBoth the input and output of the operation are streaming. Both the client and service will stream messages to each
other until the connections are closed.
InThe input of the operation is streaming. The client will send a stream of events; and, once the stream is closed,
the service will respond with a message.
OutThe output of the operation is streaming. The client will send a message to the service, and the service will send
a stream of events back to the client.
NoneNeither the input nor the output are streaming. This is the default mode of an operation without the @stream
decorator.

fixed32

An unsigned 32-bit integer that will use the fixed32 encoding when used in a Protobuf message.

Protobuf binary format

Always four bytes. More efficient than uint32 if values are often greater than 228.

scalar TypeSpec.Protobuf.fixed32

fixed64

An unsigned 64-bit integer that will use the fixed64 encoding when used in a Protobuf message.

Protobuf binary format

Always eight bytes. More efficient than uint64 if values are often greater than 256.

scalar TypeSpec.Protobuf.fixed64

sfixed32

A signed 32-bit integer that will use the sfixed32 encoding when used in a Protobuf message.

Protobuf binary format

Always four bytes.

scalar TypeSpec.Protobuf.sfixed32

sfixed64

A signed 64-bit integer that will use the sfixed64 encoding when used in a Protobuf message.

Protobuf binary format

Always eight bytes.

scalar TypeSpec.Protobuf.sfixed64

sint32

A signed 32-bit integer that will use the sint32 encoding when used in a Protobuf message.

Protobuf binary format

Uses variable-length encoding. These more efficiently encode negative numbers than regular int32s.

scalar TypeSpec.Protobuf.sint32

sint64

A signed 64-bit integer that will use the sint64 encoding when used in a Protobuf message.

Protobuf binary format

Uses variable-length encoding. These more efficiently encode negative numbers than regular int64s.

scalar TypeSpec.Protobuf.sint64

TypeSpec.Protobuf.WellKnown

Any

Any value.

This model references google.protobuf.Any from google/protobuf/any.proto.

model TypeSpec.Protobuf.WellKnown.Any

Properties

NameTypeDescription
_externnever

Empty

An empty message.

This model references google.protobuf.Empty from google/protobuf/empty.proto.

model TypeSpec.Protobuf.WellKnown.Empty

Properties

NameTypeDescription
_externnever

LatLng

A latitude and longitude.

This model references google.type.LatLng from google/type/latlng.proto.

model TypeSpec.Protobuf.WellKnown.LatLng

Properties

NameTypeDescription
_externnever

Timestamp

A timestamp.

This model references google.protobuf.Timestamp from google/protobuf/timestamp.proto.

model TypeSpec.Protobuf.WellKnown.Timestamp

Properties

NameTypeDescription
_externnever