Mixin

@SerialVersionUID(0L) final case class Mixin(name: String, root: String, unknownFields: UnknownFieldSet) extends GeneratedMessage with Updatable[Mixin]

Declares an API Interface to be included in this interface. The including interface must redeclare all the methods from the included interface, 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 interface 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"; } ... }

Value Params
name

The fully qualified name of the interface which is included.

root

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

Companion
object
trait Updatable[Mixin]
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any

Value members

Concrete methods

def getField(`__field`: FieldDescriptor): PValue
def getFieldByNumber(`__fieldNumber`: Int): Any
override def serializedSize: Int
Definition Classes
def toProtoString: String
def withName(`__v`: String): Mixin
def withRoot(`__v`: String): Mixin
def writeTo(`_output__`: CodedOutputStream): Unit

Inherited methods

def productElementNames: Iterator[String]
Inherited from
Product
def productIterator: Iterator[Any]
Inherited from
Product
final def toByteArray: Array[Byte]

Serializes the messgae and returns a byte array containing its raw bytes

Serializes the messgae and returns a byte array containing its raw bytes

Inherited from
GeneratedMessage
final def toByteString: ByteString

Serializes the messgae and returns a ByteString containing its raw bytes

Serializes the messgae and returns a ByteString containing its raw bytes

Inherited from
GeneratedMessage
final def toPMessage: PMessage
Inherited from
GeneratedMessage
def update(ms: Lens[Mixin, Mixin] => () => Mixin*): Mixin
Inherited from
Updatable
final def writeDelimitedTo(output: OutputStream): Unit
Inherited from
GeneratedMessage
final def writeTo(output: OutputStream): Unit

Serializes the message into the given output stream

Serializes the message into the given output stream

Inherited from
GeneratedMessage