File

src/bundlingCalls/bundleDescriptor.ts

Description

A descriptor for calls that can be bundled into one call.

Implements

Descriptor

Index

Properties
Methods

Constructor

constructor(bundledField: string, requestDiscriminatorFields: string[], subresponseField: string | null, byteLengthFunction: Function)

Describes the structure of bundled call.

requestDiscriminatorFields may include '.' as a separator, which is used to indicate object traversal. This allows fields in nested objects to be used to determine what request to bundle.

Parameters :
Name Type Optional Description
bundledField string No
  • the repeated field in the request message that will have its elements aggregated by bundling.
requestDiscriminatorFields string[] No
  • a list of fields in the target request message class that are used to detemrine which request messages should be bundled together.
subresponseField string | null No
  • an optional field, when present it indicates the field in the response message that should be used to demultiplex the response into multiple response messages.
byteLengthFunction Function No
  • a function to obtain the byte length to be consumed for the bundled field messages. Because Node.JS protobuf.js/gRPC uses builtin Objects for the user-visible data and internally they are encoded/decoded in protobuf manner, this function is actually necessary to calculate the byte length.

Properties

bundledField
Type : string
byteLengthFunction
Type : Function
requestDiscriminatorFields
Type : string[]
subresponseField
Type : string | null

Methods

getApiCaller
getApiCaller(settings: CallSettings)
Parameters :
Name Type Optional
settings CallSettings No
Returns : any
import {Descriptor} from '../descriptor';
import {CallSettings} from '../gax';
import {NormalApiCaller} from '../normalCalls/normalApiCaller';

import {BundleApiCaller} from './bundleApiCaller';
import {BundleExecutor} from './bundleExecutor';

/**
 * A descriptor for calls that can be bundled into one call.
 */
export class BundleDescriptor implements Descriptor {
  bundledField: string;
  requestDiscriminatorFields: string[];
  subresponseField: string | null;
  byteLengthFunction: Function;

  /**
   * Describes the structure of bundled call.
   *
   * requestDiscriminatorFields may include '.' as a separator, which is used to
   * indicate object traversal. This allows fields in nested objects to be used
   * to determine what request to bundle.
   *
   * @property {String} bundledField
   * @property {String} requestDiscriminatorFields
   * @property {String} subresponseField
   * @property {Function} byteLengthFunction
   *
   * @param {String} bundledField - the repeated field in the request message
   *   that will have its elements aggregated by bundling.
   * @param {String} requestDiscriminatorFields - a list of fields in the
   *   target request message class that are used to detemrine which request
   *   messages should be bundled together.
   * @param {String} subresponseField - an optional field, when present it
   *   indicates the field in the response message that should be used to
   *   demultiplex the response into multiple response messages.
   * @param {Function} byteLengthFunction - a function to obtain the byte
   *   length to be consumed for the bundled field messages. Because Node.JS
   *   protobuf.js/gRPC uses builtin Objects for the user-visible data and
   *   internally they are encoded/decoded in protobuf manner, this function
   *   is actually necessary to calculate the byte length.
   * @constructor
   */
  constructor(
    bundledField: string,
    requestDiscriminatorFields: string[],
    subresponseField: string | null,
    byteLengthFunction: Function
  ) {
    if (!byteLengthFunction && typeof subresponseField === 'function') {
      byteLengthFunction = subresponseField;
      subresponseField = null;
    }
    this.bundledField = bundledField;
    this.requestDiscriminatorFields = requestDiscriminatorFields;
    this.subresponseField = subresponseField;
    this.byteLengthFunction = byteLengthFunction;
  }

  getApiCaller(settings: CallSettings) {
    if (settings.isBundling === false) {
      return new NormalApiCaller();
    }
    return new BundleApiCaller(
      new BundleExecutor(settings.bundleOptions!, this)
    );
  }
}

result-matching ""

    No results matching ""