From 226b6db57ff61340bc359d2347486b0bc7ac5211 Mon Sep 17 00:00:00 2001 From: Carlos O'Ryan Date: Sat, 18 Jan 2025 14:53:05 -0500 Subject: [PATCH] fix(generator): mixins may enable streaming features --- generator/internal/language/rust.go | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/generator/internal/language/rust.go b/generator/internal/language/rust.go index 30e52bc5a..46fbd6458 100644 --- a/generator/internal/language/rust.go +++ b/generator/internal/language/rust.go @@ -1216,14 +1216,28 @@ func rustValidate(api *api.API, sourceSpecificationPackageName string) error { return nil } -func rustAddStreamingFeature(data *RustTemplateData, api *api.API, extraPackages []*rustPackage) { - var hasStreamingRPC bool - for _, m := range api.Messages { +func rustHasStreamingRPC(model *api.API) bool { + for _, m := range model.Messages { if m.IsPageableResponse { - hasStreamingRPC = true - break + return true } } + // Sometimes the method with a pageable message is using an imported message + // or is part of a mixin. + for _, s := range model.Services { + for _, m := range s.Methods { + if output, ok := model.State.MessageByID[m.OutputTypeID]; ok { + if output.IsPageableResponse { + return true + } + } + } + } + return false +} + +func rustAddStreamingFeature(data *RustTemplateData, api *api.API, extraPackages []*rustPackage) { + hasStreamingRPC := rustHasStreamingRPC(api) if !hasStreamingRPC { return }