Skip to content

Commit

Permalink
fix: add optional metadata parameter for addGrpcMetadata=true
Browse files Browse the repository at this point in the history
  • Loading branch information
vojty committed Mar 8, 2024
1 parent b9b0ff7 commit dfc69f1
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 17 deletions.
43 changes: 29 additions & 14 deletions integration/generic-metadata/hero.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/* eslint-disable */
import { Metadata } from "@grpc/grpc-js";
import * as _m0 from "protobufjs/minimal";
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
import { Foo } from "./some-file";

export const protobufPackage = "hero";

Expand Down Expand Up @@ -287,9 +287,9 @@ export const Villain = {
};

export interface HeroService {
FindOneHero(request: HeroById, metadata?: Foo): Promise<Hero>;
FindOneVillain(request: VillainById, metadata?: Foo): Promise<Villain>;
FindManyVillain(request: Observable<VillainById>, metadata?: Foo): Observable<Villain>;
FindOneHero(request: HeroById, metadata?: Metadata): Promise<Hero>;
FindOneVillain(request: VillainById, metadata?: Metadata): Promise<Villain>;
FindManyVillain(request: Observable<VillainById>, metadata?: Metadata): Observable<Villain>;
}

export const HeroServiceServiceName = "hero.HeroService";
Expand All @@ -303,21 +303,21 @@ export class HeroServiceClientImpl implements HeroService {
this.FindOneVillain = this.FindOneVillain.bind(this);
this.FindManyVillain = this.FindManyVillain.bind(this);
}
FindOneHero(request: HeroById): Promise<Hero> {
FindOneHero(request: HeroById, metadata?: Metadata): Promise<Hero> {
const data = HeroById.encode(request).finish();
const promise = this.rpc.request(this.service, "FindOneHero", data);
const promise = this.rpc.request(this.service, "FindOneHero", data, metadata);
return promise.then((data) => Hero.decode(_m0.Reader.create(data)));
}

FindOneVillain(request: VillainById): Promise<Villain> {
FindOneVillain(request: VillainById, metadata?: Metadata): Promise<Villain> {
const data = VillainById.encode(request).finish();
const promise = this.rpc.request(this.service, "FindOneVillain", data);
const promise = this.rpc.request(this.service, "FindOneVillain", data, metadata);
return promise.then((data) => Villain.decode(_m0.Reader.create(data)));
}

FindManyVillain(request: Observable<VillainById>): Observable<Villain> {
FindManyVillain(request: Observable<VillainById>, metadata?: Metadata): Observable<Villain> {
const data = request.pipe(map((request) => VillainById.encode(request).finish()));
const result = this.rpc.bidirectionalStreamingRequest(this.service, "FindManyVillain", data);
const result = this.rpc.bidirectionalStreamingRequest(this.service, "FindManyVillain", data, metadata);
return result.pipe(map((data) => Villain.decode(_m0.Reader.create(data))));
}
}
Expand Down Expand Up @@ -355,10 +355,25 @@ export const HeroServiceDefinition = {
} as const;

interface Rpc {
request(service: string, method: string, data: Uint8Array): Promise<Uint8Array>;
clientStreamingRequest(service: string, method: string, data: Observable<Uint8Array>): Promise<Uint8Array>;
serverStreamingRequest(service: string, method: string, data: Uint8Array): Observable<Uint8Array>;
bidirectionalStreamingRequest(service: string, method: string, data: Observable<Uint8Array>): Observable<Uint8Array>;
request(service: string, method: string, data: Uint8Array, metadata?: Metadata): Promise<Uint8Array>;
clientStreamingRequest(
service: string,
method: string,
data: Observable<Uint8Array>,
metadata?: Metadata,
): Promise<Uint8Array>;
serverStreamingRequest(
service: string,
method: string,
data: Uint8Array,
metadata?: Metadata,
): Observable<Uint8Array>;
bidirectionalStreamingRequest(
service: string,
method: string,
data: Observable<Uint8Array>,
metadata?: Metadata,
): Observable<Uint8Array>;
}

type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
Expand Down
2 changes: 1 addition & 1 deletion integration/generic-metadata/parameters.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
metadataType=Foo@./some-file,outputServices=generic-definitions,outputServices=default
metadataType=Foo@./some-file,outputServices=generic-definitions,outputServices=default,addGrpcMetadata=true
8 changes: 6 additions & 2 deletions src/generate-services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,7 @@ export function generateService(
params.push(code`metadata?: grpc.Metadata`);
} else if (options.addGrpcMetadata) {
const Metadata = imp("Metadata@@grpc/grpc-js");
const q = options.addNestjsRestParameter ? "" : "?";
params.push(code`metadata${q}: ${Metadata}`);
params.push(code`metadata?: ${Metadata}`);
} else if (options.metadataType) {
const Metadata = imp(options.metadataType);
params.push(code`metadata?: ${Metadata}`);
Expand Down Expand Up @@ -116,9 +115,11 @@ function generateRegularRpcMethod(ctx: Context, methodDesc: MethodDescriptorProt
const params = [
...(options.context ? [code`ctx: Context`] : []),
code`request: ${inputType}`,
...(options.addGrpcMetadata ? [code`metadata?: Metadata`] : []),
...(options.useAbortSignal ? [code`abortSignal?: AbortSignal`] : []),
];
const maybeCtx = options.context ? "ctx," : "";
const maybeMetadata = options.addGrpcMetadata ? "metadata," : "";
const maybeAbortSignal = options.useAbortSignal ? "abortSignal || undefined," : "";

let errorHandler;
Expand Down Expand Up @@ -193,6 +194,7 @@ function generateRegularRpcMethod(ctx: Context, methodDesc: MethodDescriptorProt
this.service,
"${methodDesc.name}",
data,
${maybeMetadata}
${maybeAbortSignal}
);
return ${returnStatement};
Expand Down Expand Up @@ -418,6 +420,7 @@ export function generateRpcType(ctx: Context, hasStreamingMethods: boolean): Cod
const { options } = ctx;
const maybeContext = options.context ? "<Context>" : "";
const maybeContextParam = options.context ? "ctx: Context," : "";
const maybeMetadataParam = options.addGrpcMetadata ? `metadata?: Metadata,` : "";
const maybeAbortSignalParam = options.useAbortSignal ? "abortSignal?: AbortSignal," : "";
const methods = [[code`request`, code`Uint8Array`, code`Promise<Uint8Array>`]];
const additionalMethods = [];
Expand Down Expand Up @@ -456,6 +459,7 @@ export function generateRpcType(ctx: Context, hasStreamingMethods: boolean): Cod
service: string,
method: string,
data: ${method[1]},
${maybeMetadataParam}
${maybeAbortSignalParam}
): ${method[2]};`);
});
Expand Down

0 comments on commit dfc69f1

Please sign in to comment.