@@ -3,7 +3,6 @@ package backend
33import (
44 "context"
55 "errors"
6- "slices"
76)
87
98var (
@@ -30,8 +29,7 @@ func (fn HandlerMiddlewareFunc) CreateHandlerMiddleware(next Handler) Handler {
3029
3130// MiddlewareHandler decorates a Handler with HandlerMiddleware's.
3231type MiddlewareHandler struct {
33- middlewares []HandlerMiddleware
34- finalHandler Handler
32+ handler Handler
3533}
3634
3735// HandlerFromMiddlewares creates a new MiddlewareHandler implementing Handler that decorates finalHandler with middlewares.
@@ -41,8 +39,7 @@ func HandlerFromMiddlewares(finalHandler Handler, middlewares ...HandlerMiddlewa
4139 }
4240
4341 return & MiddlewareHandler {
44- middlewares : middlewares ,
45- finalHandler : finalHandler ,
42+ handler : handlerFromMiddlewares (middlewares , finalHandler ),
4643 }, nil
4744}
4845
@@ -62,11 +59,10 @@ func (h *MiddlewareHandler) QueryData(ctx context.Context, req *QueryDataRequest
6259 }
6360
6461 ctx = h .setupContext (ctx , req .PluginContext , EndpointQueryData )
65- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
66- return handler .QueryData (ctx , req )
62+ return h .handler .QueryData (ctx , req )
6763}
6864
69- func (h MiddlewareHandler ) CallResource (ctx context.Context , req * CallResourceRequest , sender CallResourceResponseSender ) error {
65+ func (h * MiddlewareHandler ) CallResource (ctx context.Context , req * CallResourceRequest , sender CallResourceResponseSender ) error {
7066 if req == nil {
7167 return errNilRequest
7268 }
@@ -76,51 +72,46 @@ func (h MiddlewareHandler) CallResource(ctx context.Context, req *CallResourceRe
7672 }
7773
7874 ctx = h .setupContext (ctx , req .PluginContext , EndpointCallResource )
79- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
80- return handler .CallResource (ctx , req , sender )
75+ return h .handler .CallResource (ctx , req , sender )
8176}
8277
83- func (h MiddlewareHandler ) CollectMetrics (ctx context.Context , req * CollectMetricsRequest ) (* CollectMetricsResult , error ) {
78+ func (h * MiddlewareHandler ) CollectMetrics (ctx context.Context , req * CollectMetricsRequest ) (* CollectMetricsResult , error ) {
8479 if req == nil {
8580 return nil , errNilRequest
8681 }
8782
8883 ctx = h .setupContext (ctx , req .PluginContext , EndpointCollectMetrics )
89- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
90- return handler .CollectMetrics (ctx , req )
84+ return h .handler .CollectMetrics (ctx , req )
9185}
9286
93- func (h MiddlewareHandler ) CheckHealth (ctx context.Context , req * CheckHealthRequest ) (* CheckHealthResult , error ) {
87+ func (h * MiddlewareHandler ) CheckHealth (ctx context.Context , req * CheckHealthRequest ) (* CheckHealthResult , error ) {
9488 if req == nil {
9589 return nil , errNilRequest
9690 }
9791
9892 ctx = h .setupContext (ctx , req .PluginContext , EndpointCheckHealth )
99- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
100- return handler .CheckHealth (ctx , req )
93+ return h .handler .CheckHealth (ctx , req )
10194}
10295
103- func (h MiddlewareHandler ) SubscribeStream (ctx context.Context , req * SubscribeStreamRequest ) (* SubscribeStreamResponse , error ) {
96+ func (h * MiddlewareHandler ) SubscribeStream (ctx context.Context , req * SubscribeStreamRequest ) (* SubscribeStreamResponse , error ) {
10497 if req == nil {
10598 return nil , errNilRequest
10699 }
107100
108101 ctx = h .setupContext (ctx , req .PluginContext , EndpointSubscribeStream )
109- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
110- return handler .SubscribeStream (ctx , req )
102+ return h .handler .SubscribeStream (ctx , req )
111103}
112104
113- func (h MiddlewareHandler ) PublishStream (ctx context.Context , req * PublishStreamRequest ) (* PublishStreamResponse , error ) {
105+ func (h * MiddlewareHandler ) PublishStream (ctx context.Context , req * PublishStreamRequest ) (* PublishStreamResponse , error ) {
114106 if req == nil {
115107 return nil , errNilRequest
116108 }
117109
118110 ctx = h .setupContext (ctx , req .PluginContext , EndpointPublishStream )
119- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
120- return handler .PublishStream (ctx , req )
111+ return h .handler .PublishStream (ctx , req )
121112}
122113
123- func (h MiddlewareHandler ) RunStream (ctx context.Context , req * RunStreamRequest , sender * StreamSender ) error {
114+ func (h * MiddlewareHandler ) RunStream (ctx context.Context , req * RunStreamRequest , sender * StreamSender ) error {
124115 if req == nil {
125116 return errNilRequest
126117 }
@@ -130,51 +121,40 @@ func (h MiddlewareHandler) RunStream(ctx context.Context, req *RunStreamRequest,
130121 }
131122
132123 ctx = h .setupContext (ctx , req .PluginContext , EndpointRunStream )
133- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
134- return handler .RunStream (ctx , req , sender )
124+ return h .handler .RunStream (ctx , req , sender )
135125}
136126
137- func (h MiddlewareHandler ) ValidateAdmission (ctx context.Context , req * AdmissionRequest ) (* ValidationResponse , error ) {
127+ func (h * MiddlewareHandler ) ValidateAdmission (ctx context.Context , req * AdmissionRequest ) (* ValidationResponse , error ) {
138128 if req == nil {
139129 return nil , errNilRequest
140130 }
141131
142132 ctx = h .setupContext (ctx , req .PluginContext , EndpointValidateAdmission )
143- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
144- return handler .ValidateAdmission (ctx , req )
133+ return h .handler .ValidateAdmission (ctx , req )
145134}
146135
147- func (h MiddlewareHandler ) MutateAdmission (ctx context.Context , req * AdmissionRequest ) (* MutationResponse , error ) {
136+ func (h * MiddlewareHandler ) MutateAdmission (ctx context.Context , req * AdmissionRequest ) (* MutationResponse , error ) {
148137 if req == nil {
149138 return nil , errNilRequest
150139 }
151140
152141 ctx = h .setupContext (ctx , req .PluginContext , EndpointMutateAdmission )
153- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
154- return handler .MutateAdmission (ctx , req )
142+ return h .handler .MutateAdmission (ctx , req )
155143}
156144
157- func (h MiddlewareHandler ) ConvertObjects (ctx context.Context , req * ConversionRequest ) (* ConversionResponse , error ) {
145+ func (h * MiddlewareHandler ) ConvertObjects (ctx context.Context , req * ConversionRequest ) (* ConversionResponse , error ) {
158146 if req == nil {
159147 return nil , errNilRequest
160148 }
161149
162150 ctx = h .setupContext (ctx , req .PluginContext , EndpointConvertObjects )
163- handler := handlerFromMiddlewares (h .middlewares , h .finalHandler )
164- return handler .ConvertObjects (ctx , req )
151+ return h .handler .ConvertObjects (ctx , req )
165152}
166153
167154func handlerFromMiddlewares (middlewares []HandlerMiddleware , finalHandler Handler ) Handler {
168- if len (middlewares ) == 0 {
169- return finalHandler
170- }
171-
172- clonedMws := slices .Clone (middlewares )
173- slices .Reverse (clonedMws )
174155 next := finalHandler
175-
176- for _ , m := range clonedMws {
177- next = m .CreateHandlerMiddleware (next )
156+ for i := len (middlewares ) - 1 ; i >= 0 ; i -- {
157+ next = middlewares [i ].CreateHandlerMiddleware (next )
178158 }
179159
180160 return next
0 commit comments