Skip to content

Commit c97738f

Browse files
sfinnmansfinnman
authored andcommitted
feat: add metadata about service and method to requesthandler
Adding metadata about the service and method which is invoked to the call of the requestHandler. This allows a request-handler to resolve proper service and method configurations for http requests if need be. An example usage is to use the default service configuration in order to resolve retry- or hedging-policy for a call. This change should be backwards compatible, since the request handler signature specifies the meta as an optional argument.
1 parent 32deeab commit c97738f

File tree

3 files changed

+69
-3
lines changed

3 files changed

+69
-3
lines changed

examples/proto/gen/typescript/einride/example/freight/v1/index.ts

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ type RequestType = {
426426
body: string | null;
427427
};
428428

429-
type RequestHandler = (request: RequestType) => Promise<unknown>;
429+
type RequestHandler = (request: RequestType, meta: { service: string, method: string }) => Promise<unknown>;
430430

431431
export function createFreightServiceClient(
432432
handler: RequestHandler
@@ -447,6 +447,9 @@ export function createFreightServiceClient(
447447
path: uri,
448448
method: "GET",
449449
body,
450+
}, {
451+
service: "FreightService",
452+
method: "GetShipper",
450453
}) as Promise<Shipper>;
451454
},
452455
ListShippers(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -467,6 +470,9 @@ export function createFreightServiceClient(
467470
path: uri,
468471
method: "GET",
469472
body,
473+
}, {
474+
service: "FreightService",
475+
method: "ListShippers",
470476
}) as Promise<ListShippersResponse>;
471477
},
472478
CreateShipper(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -481,6 +487,9 @@ export function createFreightServiceClient(
481487
path: uri,
482488
method: "POST",
483489
body,
490+
}, {
491+
service: "FreightService",
492+
method: "CreateShipper",
484493
}) as Promise<Shipper>;
485494
},
486495
UpdateShipper(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -501,6 +510,9 @@ export function createFreightServiceClient(
501510
path: uri,
502511
method: "PATCH",
503512
body,
513+
}, {
514+
service: "FreightService",
515+
method: "UpdateShipper",
504516
}) as Promise<Shipper>;
505517
},
506518
DeleteShipper(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -518,6 +530,9 @@ export function createFreightServiceClient(
518530
path: uri,
519531
method: "DELETE",
520532
body,
533+
}, {
534+
service: "FreightService",
535+
method: "DeleteShipper",
521536
}) as Promise<Shipper>;
522537
},
523538
GetSite(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -535,6 +550,9 @@ export function createFreightServiceClient(
535550
path: uri,
536551
method: "GET",
537552
body,
553+
}, {
554+
service: "FreightService",
555+
method: "GetSite",
538556
}) as Promise<Site>;
539557
},
540558
ListSites(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -558,6 +576,9 @@ export function createFreightServiceClient(
558576
path: uri,
559577
method: "GET",
560578
body,
579+
}, {
580+
service: "FreightService",
581+
method: "ListSites",
561582
}) as Promise<ListSitesResponse>;
562583
},
563584
CreateSite(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -575,6 +596,9 @@ export function createFreightServiceClient(
575596
path: uri,
576597
method: "POST",
577598
body,
599+
}, {
600+
service: "FreightService",
601+
method: "CreateSite",
578602
}) as Promise<Site>;
579603
},
580604
UpdateSite(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -595,6 +619,9 @@ export function createFreightServiceClient(
595619
path: uri,
596620
method: "PATCH",
597621
body,
622+
}, {
623+
service: "FreightService",
624+
method: "UpdateSite",
598625
}) as Promise<Site>;
599626
},
600627
DeleteSite(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -612,6 +639,9 @@ export function createFreightServiceClient(
612639
path: uri,
613640
method: "DELETE",
614641
body,
642+
}, {
643+
service: "FreightService",
644+
method: "DeleteSite",
615645
}) as Promise<Site>;
616646
},
617647
GetShipment(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -629,6 +659,9 @@ export function createFreightServiceClient(
629659
path: uri,
630660
method: "GET",
631661
body,
662+
}, {
663+
service: "FreightService",
664+
method: "GetShipment",
632665
}) as Promise<Shipment>;
633666
},
634667
ListShipments(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -652,6 +685,9 @@ export function createFreightServiceClient(
652685
path: uri,
653686
method: "GET",
654687
body,
688+
}, {
689+
service: "FreightService",
690+
method: "ListShipments",
655691
}) as Promise<ListShipmentsResponse>;
656692
},
657693
CreateShipment(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -669,6 +705,9 @@ export function createFreightServiceClient(
669705
path: uri,
670706
method: "POST",
671707
body,
708+
}, {
709+
service: "FreightService",
710+
method: "CreateShipment",
672711
}) as Promise<Shipment>;
673712
},
674713
UpdateShipment(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -689,6 +728,9 @@ export function createFreightServiceClient(
689728
path: uri,
690729
method: "PATCH",
691730
body,
731+
}, {
732+
service: "FreightService",
733+
method: "UpdateShipment",
692734
}) as Promise<Shipment>;
693735
},
694736
DeleteShipment(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -706,6 +748,9 @@ export function createFreightServiceClient(
706748
path: uri,
707749
method: "DELETE",
708750
body,
751+
}, {
752+
service: "FreightService",
753+
method: "DeleteShipment",
709754
}) as Promise<Shipment>;
710755
},
711756
};

examples/proto/gen/typescript/einride/example/syntax/v1/index.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ type RequestType = {
304304
body: string | null;
305305
};
306306

307-
type RequestHandler = (request: RequestType) => Promise<unknown>;
307+
type RequestHandler = (request: RequestType, meta: { service: string, method: string }) => Promise<unknown>;
308308

309309
export function createSyntaxServiceClient(
310310
handler: RequestHandler
@@ -333,6 +333,9 @@ export function createSyntaxServiceClient(
333333
path: uri,
334334
method: "GET",
335335
body,
336+
}, {
337+
service: "SyntaxService",
338+
method: "QueryOnly",
336339
}) as Promise<Message>;
337340
},
338341
EmptyVerb(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -347,6 +350,9 @@ export function createSyntaxServiceClient(
347350
path: uri,
348351
method: "GET",
349352
body,
353+
}, {
354+
service: "SyntaxService",
355+
method: "EmptyVerb",
350356
}) as Promise<wellKnownEmpty>;
351357
},
352358
StarBody(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -361,6 +367,9 @@ export function createSyntaxServiceClient(
361367
path: uri,
362368
method: "POST",
363369
body,
370+
}, {
371+
service: "SyntaxService",
372+
method: "StarBody",
364373
}) as Promise<Message>;
365374
},
366375
Body(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -383,6 +392,9 @@ export function createSyntaxServiceClient(
383392
path: uri,
384393
method: "POST",
385394
body,
395+
}, {
396+
service: "SyntaxService",
397+
method: "Body",
386398
}) as Promise<Message>;
387399
},
388400
Path(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -408,6 +420,9 @@ export function createSyntaxServiceClient(
408420
path: uri,
409421
method: "POST",
410422
body,
423+
}, {
424+
service: "SyntaxService",
425+
method: "Path",
411426
}) as Promise<Message>;
412427
},
413428
PathBody(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
@@ -430,6 +445,9 @@ export function createSyntaxServiceClient(
430445
path: uri,
431446
method: "POST",
432447
body,
448+
}, {
449+
service: "SyntaxService",
450+
method: "PathBody",
433451
}) as Promise<Message>;
434452
},
435453
};

internal/plugin/servicegen.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (s serviceGenerator) generateHandler(f *codegen.File) {
5050
f.P(t(1), "body: string | null;")
5151
f.P("};")
5252
f.P()
53-
f.P("type RequestHandler = (request: RequestType) => Promise<unknown>;")
53+
f.P("type RequestHandler = (request: RequestType, meta: { service: string, method: string }) => Promise<unknown>;")
5454
f.P()
5555
}
5656

@@ -105,6 +105,9 @@ func (s serviceGenerator) generateMethod(f *codegen.File, method protoreflect.Me
105105
f.P(t(4), "path: uri,")
106106
f.P(t(4), "method: ", strconv.Quote(rule.Method), ",")
107107
f.P(t(4), "body,")
108+
f.P(t(3), "}, {")
109+
f.P(t(4), "service: \"", method.Parent().Name(), "\",")
110+
f.P(t(4), "method: \"", method.Name(), "\",")
108111
f.P(t(3), "}) as Promise<", outputType.Reference(), ">;")
109112
f.P(t(2), "},")
110113
return nil

0 commit comments

Comments
 (0)