Google.Protobuf.WellKnownTypes.Mixin

Declares an API to be included in this API.

Summary

The including API must redeclare all the methods from the included API, but documentation and options are inherited as follows:

  • If after comment and whitespace stripping, the documentation string of the redeclared method is empty, it will be inherited from the original method.
  • Each annotation belonging to the service config (http, visibility) which is not set in the redeclared method will be inherited.
  • If an http annotation is inherited, the path pattern will be modified as follows. Any version prefix will be replaced by the version of the including API plus the [root][] path if specified.

Example of a simple mixin:

package google.acl.v1;
service AccessControl {
  // Get the underlying ACL object.
  rpc GetAcl(GetAclRequest) returns (Acl) {
    option (google.api.http).get = "/v1/{resource=**}:getAcl";
  }
}

package google.storage.v2;
service Storage {
  rpc GetAcl(GetAclRequest) returns (Acl);

  // Get a data record.
  rpc GetData(GetDataRequest) returns (Data) {
    option (google.api.http).get = "/v2/{resource=**}";
  }
}

Example of a mixin configuration:

apis:
- name: google.storage.v2.Storage
  mixins:
  - name: google.acl.v1.AccessControl

The mixin construct implies that all methods in AccessControl are also declared with same name and request/response types in Storage. A documentation generator or annotation processor will see the effective Storage.GetAcl method after inherting documentation and annotations as follows:

service Storage {
  // Get the underlying ACL object.
  rpc GetAcl(GetAclRequest) returns (Acl) {
    option (google.api.http).get = "/v2/{resource=**}:getAcl";
  }
  ...
}

Note how the version in the path pattern changed from v1 to v2.

If the root field in the mixin is specified, it should be a relative path under which inherited HTTP paths are placed. Example:

apis:
- name: google.storage.v2.Storage
  mixins:
  - name: google.acl.v1.AccessControl
    root: acls

This implies the following inherited HTTP annotation:

service Storage {
  // Get the underlying ACL object.
  rpc GetAcl(GetAclRequest) returns (Acl) {
    option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
  }
  ...
}

Inheritance

Inherits from: pb::IMessage< Mixin >

Constructors and Destructors

Mixin()
Mixin(Mixin other)

Properties

Descriptor
pbr::MessageDescriptor
Descriptor
pbr::MessageDescriptor pb::IMessage.
Name
string
The fully qualified name of the API which is included.
Parser
pb::MessageParser< Mixin >
Root
string
If non-empty specifies a path under which inherited HTTP paths are rooted.

Public attributes

NameFieldNumber = 1
const int
Field number for the "name" field.
RootFieldNumber = 2
const int
Field number for the "root" field.

Public functions

CalculateSize()
int
Clone()
Equals(object other)
override bool
Equals(Mixin other)
bool
GetHashCode()
override int
MergeFrom(Mixin other)
void
MergeFrom(pb::CodedInputStream input)
void
ToString()
override string
WriteTo(pb::CodedOutputStream output)
void

Properties

Descriptor

pbr::MessageDescriptor Descriptor

Descriptor

pbr::MessageDescriptor pb::IMessage. Descriptor

Name

string Name

The fully qualified name of the API which is included.

Parser

pb::MessageParser< Mixin > Parser

Root

string Root

If non-empty specifies a path under which inherited HTTP paths are rooted.

Public attributes

NameFieldNumber

const int NameFieldNumber = 1

Field number for the "name" field.

RootFieldNumber

const int RootFieldNumber = 2

Field number for the "root" field.

Public functions

CalculateSize

int CalculateSize()

Clone

Mixin Clone()

Equals

override bool Equals(
  object other
)

Equals

bool Equals(
  Mixin other
)

GetHashCode

override int GetHashCode()

MergeFrom

void MergeFrom(
  Mixin other
)

MergeFrom

void MergeFrom(
  pb::CodedInputStream input
)

Mixin

 Mixin()

Mixin

 Mixin(
  Mixin other
)

ToString

override string ToString()

WriteTo

void WriteTo(
  pb::CodedOutputStream output
)