From d63bf199f57c92330c7e5254d5ae2b7478faa2c9 Mon Sep 17 00:00:00 2001 From: Elias Arruda Date: Tue, 14 Jan 2025 00:16:13 -0300 Subject: [PATCH] generate grpc/invokers only for actors with option specified --- .../grpc/generators/actor_invoker_generator.ex | 16 ++++++++++++++-- .../grpc/generators/generator_accumulator.ex | 6 ++++++ .../grpc/generators/grpc_with_custom_options.ex | 16 ++++++++++++++-- lib/sidecar/grpc/generators/handler_generator.ex | 16 ++++++++++++++-- .../generators/handler_transcoding_generator.ex | 16 ++++++++++++++-- 5 files changed, 62 insertions(+), 8 deletions(-) diff --git a/lib/sidecar/grpc/generators/actor_invoker_generator.ex b/lib/sidecar/grpc/generators/actor_invoker_generator.ex index 2261cbd9..4c0aba6e 100644 --- a/lib/sidecar/grpc/generators/actor_invoker_generator.ex +++ b/lib/sidecar/grpc/generators/actor_invoker_generator.ex @@ -120,6 +120,20 @@ defmodule Sidecar.GRPC.Generators.ActorInvoker do @impl true def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = _desc) do + svcs = + Enum.filter(svcs, fn svc -> + Map.get(svc.options || %{}, :__pb_extensions__, %{}) + |> Map.get({Spawn.Actors.PbExtension, :actor}) + end) + + do_generate(ctx, svcs) + end + + def generate(_ctx, _opts), do: {"unknown", [render: false]} + + defp do_generate(_ctx, []), do: {"unknown", [render: false]} + + defp do_generate(ctx, svcs) do for svc <- svcs do mod_name = Util.mod_name(ctx, [Macro.camelize(svc.name)]) actor_name = Macro.camelize(svc.name) @@ -151,8 +165,6 @@ defmodule Sidecar.GRPC.Generators.ActorInvoker do end end - def generate(_ctx, _opts), do: {"unknown", [render: false]} - defp opts(nil), do: %{} defp opts(%Google.Protobuf.MethodOptions{__pb_extensions__: extensions}) diff --git a/lib/sidecar/grpc/generators/generator_accumulator.ex b/lib/sidecar/grpc/generators/generator_accumulator.ex index b4ca33e3..ed99e09d 100644 --- a/lib/sidecar/grpc/generators/generator_accumulator.ex +++ b/lib/sidecar/grpc/generators/generator_accumulator.ex @@ -18,6 +18,12 @@ defmodule Sidecar.GRPC.Generators.GeneratorAccumulator do @impl true def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = _desc) do + svcs = + Enum.filter(svcs, fn svc -> + Map.get(svc.options || %{}, :__pb_extensions__, %{}) + |> Map.get({Spawn.Actors.PbExtension, :actor}) + end) + current_services = :persistent_term.get(:grpc_services, []) descriptors = (:persistent_term.get(:proto_file_descriptors, []) ++ svcs) |> Enum.uniq() diff --git a/lib/sidecar/grpc/generators/grpc_with_custom_options.ex b/lib/sidecar/grpc/generators/grpc_with_custom_options.ex index f1c99b23..f117a865 100644 --- a/lib/sidecar/grpc/generators/grpc_with_custom_options.ex +++ b/lib/sidecar/grpc/generators/grpc_with_custom_options.ex @@ -37,6 +37,20 @@ defmodule Sidecar.GRPC.Generators.GRPCWithCustomOptions do @impl true def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = desc) do + svcs = + Enum.filter(svcs, fn svc -> + Map.get(svc.options || %{}, :__pb_extensions__, %{}) + |> Map.get({Spawn.Actors.PbExtension, :actor}) + end) + + do_generate(ctx, svcs, desc) + end + + def generate(_ctx, _opts), do: {"unknown", [render: false]} + + defp do_generate(_ctx, [], _desc), do: {"unknown", [render: false]} + + defp do_generate(ctx, svcs, desc) do for svc <- svcs do mod_name = Util.mod_name(ctx, [Macro.camelize(svc.name)]) name = Util.prepend_package_prefix(ctx.package, svc.name) @@ -73,8 +87,6 @@ defmodule Sidecar.GRPC.Generators.GRPCWithCustomOptions do end end - def generate(_ctx, _opts), do: {"unknown", [render: false]} - defp service_arg(type, _streaming? = true), do: "stream(#{type})" defp service_arg(type, _streaming?), do: type diff --git a/lib/sidecar/grpc/generators/handler_generator.ex b/lib/sidecar/grpc/generators/handler_generator.ex index 7ef82987..2661d4f2 100644 --- a/lib/sidecar/grpc/generators/handler_generator.ex +++ b/lib/sidecar/grpc/generators/handler_generator.ex @@ -41,6 +41,20 @@ defmodule Sidecar.GRPC.Generators.HandlerGenerator do @impl true def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = _desc) do + svcs = + Enum.filter(svcs, fn svc -> + Map.get(svc.options || %{}, :__pb_extensions__, %{}) + |> Map.get({Spawn.Actors.PbExtension, :actor}) + end) + + do_generate(ctx, svcs) + end + + def generate(_ctx, _opts), do: {"unknown", [render: false]} + + defp do_generate(_ctx, []), do: {"unknown", [render: false]} + + defp do_generate(ctx, svcs) do for svc <- svcs do mod_name = Util.mod_name(ctx, [Macro.camelize(svc.name)]) actor_name = Macro.camelize(svc.name) @@ -72,8 +86,6 @@ defmodule Sidecar.GRPC.Generators.HandlerGenerator do end end - def generate(_ctx, _opts), do: {"unknown", [render: false]} - defp service_arg(type, _streaming? = true), do: "stream(#{type})" defp service_arg(type, _streaming?), do: type diff --git a/lib/sidecar/grpc/generators/handler_transcoding_generator.ex b/lib/sidecar/grpc/generators/handler_transcoding_generator.ex index 6f945981..c7db51cd 100644 --- a/lib/sidecar/grpc/generators/handler_transcoding_generator.ex +++ b/lib/sidecar/grpc/generators/handler_transcoding_generator.ex @@ -42,6 +42,20 @@ defmodule Sidecar.GRPC.Generators.HandlerTranscodingGenerator do @impl true def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = _desc) do + svcs = + Enum.filter(svcs, fn svc -> + Map.get(svc.options || %{}, :__pb_extensions__, %{}) + |> Map.get({Spawn.Actors.PbExtension, :actor}) + end) + + do_generate(ctx, svcs) + end + + def generate(_ctx, _opts), do: {"unknown", [render: false]} + + defp do_generate(_ctx, []), do: {"unknown", [render: false]} + + defp do_generate(ctx, svcs) do for svc <- svcs do mod_name = Util.mod_name(ctx, [Macro.camelize(svc.name)]) actor_name = Macro.camelize(svc.name) @@ -73,8 +87,6 @@ defmodule Sidecar.GRPC.Generators.HandlerTranscodingGenerator do end end - def generate(_ctx, _opts), do: {"unknown", [render: false]} - defp service_arg(type, _streaming? = true), do: "stream(#{type})" defp service_arg(type, _streaming?), do: type