grpc-js-core: add StatusBuilder support

This commit ports StatusBuilder to TypeScript.
This commit is contained in:
cjihrig 2018-09-02 09:08:07 -04:00
parent 42a72cabf7
commit a4583081dd
No known key found for this signature in database
GPG Key ID: 7434390BDBE9B9C5
3 changed files with 99 additions and 3 deletions

View File

@ -8,6 +8,7 @@ import {LogVerbosity, Status} from './constants';
import {loadPackageDefinition, makeClientConstructor} from './make-client';
import {Metadata} from './metadata';
import { Channel } from './channel';
import {StatusBuilder} from './status-builder';
import * as logging from './logging';
interface IndexedObject {
@ -163,9 +164,7 @@ export const getClientChannel = (client: Client) => {
return Client.prototype.getChannel.call(client);
};
export const StatusBuilder = () => {
throw new Error('Not yet implemented');
};
export {StatusBuilder};
export const ListenerBuilder = () => {
throw new Error('Not yet implemented');

View File

@ -0,0 +1,63 @@
import {StatusObject} from './call-stream';
import {Status} from './constants';
import {Metadata} from './metadata';
/**
* A builder for gRPC status objects.
*/
export class StatusBuilder {
private code: Status|null;
private details: string|null;
private metadata: Metadata|null;
constructor() {
this.code = null;
this.details = null;
this.metadata = null;
}
/**
* Adds a status code to the builder.
*/
withCode(code: Status): this {
this.code = code;
return this;
}
/**
* Adds details to the builder.
*/
withDetails(details: string): this {
this.details = details;
return this;
}
/**
* Adds metadata to the builder.
*/
withMetadata(metadata: Metadata): this {
this.metadata = metadata;
return this;
}
/**
* Builds the status object.
*/
build(): Partial<StatusObject> {
const status: Partial<StatusObject> = {};
if (this.code !== null) {
status.code = this.code;
}
if (this.details !== null) {
status.details = this.details;
}
if (this.metadata !== null) {
status.metadata = this.metadata;
}
return status;
}
}

View File

@ -0,0 +1,34 @@
import * as assert from 'assert';
import * as grpc from '../src';
import {StatusBuilder} from '../src/status-builder';
describe('StatusBuilder', () => {
it('is exported by the module', () => {
assert.strictEqual(StatusBuilder, grpc.StatusBuilder);
});
it('builds a status object', () => {
const builder = new StatusBuilder();
const metadata = new grpc.Metadata();
let result;
assert.deepStrictEqual(builder.build(), {});
result = builder.withCode(grpc.status.OK);
assert.strictEqual(result, builder);
assert.deepStrictEqual(builder.build(), { code: grpc.status.OK });
result = builder.withDetails('foobar');
assert.strictEqual(result, builder);
assert.deepStrictEqual(builder.build(), {
code: grpc.status.OK,
details: 'foobar'
});
result = builder.withMetadata(metadata);
assert.strictEqual(result, builder);
assert.deepStrictEqual(builder.build(), {
code: grpc.status.OK,
details: 'foobar',
metadata
});
});
});