@@ -88,7 +88,8 @@ func generateAPI(ctx context.Context, api *config.API, library *config.Library,
8888 return fmt .Errorf ("failed to create directory %s: %w" , dir , err )
8989 }
9090 }
91- protocOptions , err := createProtocOptions (api , library , googleapisDir , protoDir , grpcDir , gapicDir )
91+ javaAPI := findJavaAPI (library , api )
92+ protocOptions , err := createProtocOptions (api , javaAPI , library , googleapisDir , protoDir , grpcDir , gapicDir )
9293 if err != nil {
9394 return fmt .Errorf ("failed to create protoc options: %w" , err )
9495 }
@@ -187,7 +188,7 @@ func buildLicenseText(year int) string {
187188 return b .String ()
188189}
189190
190- func createProtocOptions (api * config.API , library * config.Library , googleapisDir , protoDir , grpcDir , gapicDir string ) ([]string , error ) {
191+ func createProtocOptions (api * config.API , javaAPI * config. JavaAPI , library * config.Library , googleapisDir , protoDir , grpcDir , gapicDir string ) ([]string , error ) {
191192 args := []string {
192193 // --java_out generates standard Protocol Buffer Java classes.
193194 fmt .Sprintf ("--java_out=%s" , protoDir ),
@@ -215,21 +216,22 @@ func createProtocOptions(api *config.API, library *config.Library, googleapisDir
215216 gapicOpts = append (gapicOpts , gapicOpt ("api-service-config" , filepath .Join (googleapisDir , apiCfg .ServiceConfig )))
216217 }
217218
218- gc , err := serviceconfig .FindGRPCServiceConfig (googleapisDir , api .Path )
219+ grpcServiceConfig , err := serviceconfig .FindGRPCServiceConfig (googleapisDir , api .Path )
219220 if err != nil {
220221 return nil , fmt .Errorf ("failed to find grpc service config: %w" , err )
221222 }
222- if gc != "" {
223+ if grpcServiceConfig != "" {
223224 // grpc-service-config specifies the retry and timeout settings for the gRPC client.
224- gapicOpts = append (gapicOpts , gapicOpt ("grpc-service-config" , filepath .Join (googleapisDir , gc )))
225+ gapicOpts = append (gapicOpts , gapicOpt ("grpc-service-config" , filepath .Join (googleapisDir , grpcServiceConfig )))
225226 }
226227 // transport specifies whether to generate gRPC, REST, or both types of clients.
227228 gapicOpts = append (gapicOpts , gapicOpt ("transport" , transport ))
229+
228230 // rest-numeric-enums ensures that enums in REST requests are encoded as numbers
229231 // rather than strings.
230- // TODO(https://github.com/googleapis/librarian/issues/4130):
231- // assign this according to config
232- gapicOpts = append ( gapicOpts , "rest-numeric-enums" )
232+ if javaAPI == nil || ! javaAPI . NoRestNumericEnums {
233+ gapicOpts = append ( gapicOpts , "rest-numeric-enums" )
234+ }
233235
234236 // --java_gapic_out invokes the GAPIC generator.
235237 // The "metadata:" prefix is a parameter that tells the generator to include
@@ -391,3 +393,15 @@ func collectJavaFiles(root string) ([]string, error) {
391393 })
392394 return files , err
393395}
396+
397+ func findJavaAPI (library * config.Library , api * config.API ) * config.JavaAPI {
398+ if library .Java == nil {
399+ return nil
400+ }
401+ for _ , ja := range library .Java .JavaAPIs {
402+ if ja .Path == api .Path {
403+ return ja
404+ }
405+ }
406+ return nil
407+ }
0 commit comments