src/bundlingCalls/bundleDescriptor.ts
A descriptor for calls that can be bundled into one call.
Properties |
Methods |
constructor(bundledField: string, requestDiscriminatorFields: string[], subresponseField: string | null, byteLengthFunction: Function)
|
||||||||||||||||||||
Defined in src/bundlingCalls/bundleDescriptor.ts:32
|
||||||||||||||||||||
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. that will have its elements aggregated by bundling. target request message class that are used to detemrine which request messages should be bundled together. indicates the field in the response message that should be used to demultiplex the response into multiple response messages. 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.
Parameters :
|
bundledField |
Type : string
|
Defined in src/bundlingCalls/bundleDescriptor.ts:29
|
byteLengthFunction |
Type : Function
|
Defined in src/bundlingCalls/bundleDescriptor.ts:32
|
requestDiscriminatorFields |
Type : string[]
|
Defined in src/bundlingCalls/bundleDescriptor.ts:30
|
subresponseField |
Type : string | null
|
Defined in src/bundlingCalls/bundleDescriptor.ts:31
|
getApiCaller | ||||||
getApiCaller(settings: CallSettings)
|
||||||
Defined in src/bundlingCalls/bundleDescriptor.ts:78
|
||||||
Parameters :
Returns :
any
|
import {Descriptor} from '../descriptor';
import {CallSettings} from '../gax';
import {NormalApiCaller} from '../normalCalls/normalApiCaller';
import {BundleApiCaller} from './bundleApiCaller';
import {BundleExecutor} from './bundleExecutor';
import {toCamelCase as snakeToCamelCase} from '../util';
/**
* 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.map(snakeToCamelCase);
this.subresponseField = subresponseField;
this.byteLengthFunction = byteLengthFunction;
}
getApiCaller(settings: CallSettings) {
if (settings.isBundling === false) {
return new NormalApiCaller();
}
return new BundleApiCaller(
new BundleExecutor(settings.bundleOptions!, this)
);
}
}