Skip to content

Commit

Permalink
code generator
Browse files Browse the repository at this point in the history
  • Loading branch information
eliasdarruda committed Jan 13, 2025
1 parent d5f18fd commit e610d4d
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 52 deletions.
2 changes: 2 additions & 0 deletions lib/sidecar/grpc/code_generator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,8 @@ defmodule Sidecar.GRPC.CodeGenerator do

files ->
files
# Exclude files that contains google folder
|> Enum.reject(&String.contains?(&1, "google/"))
|> Enum.filter(&String.ends_with?(&1, extension))
|> Enum.sort()
end
Expand Down
11 changes: 9 additions & 2 deletions lib/sidecar/grpc/generators/actor_invoker_generator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ defmodule Sidecar.GRPC.Generators.ActorInvoker do
@impl true
def template do
"""
<%= if @render do %>
defmodule <%= @module %> do
@moduledoc "This module provides helper functions for invoking the methods on the <%= @service_name %> actor."
Expand Down Expand Up @@ -113,11 +114,12 @@ defmodule Sidecar.GRPC.Generators.ActorInvoker do
end
<% end %>
end
<% end %>
"""
end

@impl true
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: svcs} = _desc) do
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = _desc) do
for svc <- svcs do
mod_name = Util.mod_name(ctx, [Macro.camelize(svc.name)])
actor_name = Macro.camelize(svc.name)
Expand All @@ -143,11 +145,16 @@ defmodule Sidecar.GRPC.Generators.ActorInvoker do
actor_name: actor_name,
service_name: mod_name,
methods: methods,
version: Util.version()
version: Util.version(),
render: true
]}
end
end

def generate(_ctx, _opts), do: {"unknown", [render: false]}

defp opts(nil), do: %{}

defp opts(%Google.Protobuf.MethodOptions{__pb_extensions__: extensions})
when extensions == %{} do
%{}
Expand Down
9 changes: 4 additions & 5 deletions lib/sidecar/grpc/generators/generator_accumulator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ defmodule Sidecar.GRPC.Generators.GeneratorAccumulator do
end

@impl true
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: svcs} = _desc) do
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = _desc) do
current_services = :persistent_term.get(:grpc_services, [])
descriptors = (:persistent_term.get(:proto_file_descriptors, []) ++ svcs) |> Enum.uniq()

Expand All @@ -26,12 +26,11 @@ defmodule Sidecar.GRPC.Generators.GeneratorAccumulator do
:persistent_term.put(:grpc_services, services)
:persistent_term.put(:proto_file_descriptors, descriptors)

{"ProxyEndpoint",
[
services: services
]}
{"ProxyEndpoint", [render: true]}
end

def generate(_ctx, _opts), do: {"unknown", [render: false]}

defp services_to_module(_ctx, nil, current_services), do: current_services
defp services_to_module(_ctx, [], current_services), do: current_services

Expand Down
43 changes: 25 additions & 18 deletions lib/sidecar/grpc/generators/grpc_with_custom_options.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,31 @@ defmodule Sidecar.GRPC.Generators.GRPCWithCustomOptions do
@impl true
def template do
"""
defmodule <%= @module %>.Service do
use GRPC.Service, name: <%= inspect(@service_name) %>, protoc_gen_elixir_version: "<%= @version %>"
<%= if @descriptor_fun_body do %>
def descriptor do
# credo:disable-for-next-line
<%= @descriptor_fun_body %>
end
<% end %>
<%= for {method_name, input, output, options} <- @methods do %>
rpc :<%= method_name %>, <%= input %>, <%= output %>, <%= options %>
<% end %>
end
<%= if @render do %>
defmodule <%= @module %>.Service do
use GRPC.Service, name: <%= inspect(@service_name) %>, protoc_gen_elixir_version: "<%= @version %>"
defmodule <%= @module %>.Stub do
use GRPC.Stub, service: <%= @module %>.Service
end
<%= if @descriptor_fun_body do %>
def descriptor do
# credo:disable-for-next-line
<%= @descriptor_fun_body %>
end
<% end %>
<%= for {method_name, input, output, options} <- @methods do %>
rpc :<%= method_name %>, <%= input %>, <%= output %>, <%= options %>
<% end %>
end
defmodule <%= @module %>.Stub do
use GRPC.Stub, service: <%= @module %>.Service
end
<% end %>
"""
end

@impl true
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: svcs} = desc) do
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = 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)
Expand All @@ -61,6 +63,7 @@ defmodule Sidecar.GRPC.Generators.GRPCWithCustomOptions do

{mod_name,
[
render: true,
module: mod_name,
service_name: name,
methods: methods,
Expand All @@ -70,9 +73,13 @@ 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

defp opts(nil), do: %{}

defp opts(%Google.Protobuf.MethodOptions{__pb_extensions__: extensions})
when extensions == %{} do
%{}
Expand Down
12 changes: 9 additions & 3 deletions lib/sidecar/grpc/generators/handler_generator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ defmodule Sidecar.GRPC.Generators.HandlerGenerator do
@impl true
def template do
"""
<%= if @render do %>
defmodule <%= @module %>.ActorDispatcher do
use GRPC.Server, service: <%= @service_name %>
Expand All @@ -33,13 +34,13 @@ defmodule Sidecar.GRPC.Generators.HandlerGenerator do
Dispatcher.dispatch(request)
end
<% end %>
end
<% end %>
"""
end

@impl true
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: svcs} = _desc) do
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = _desc) do
for svc <- svcs do
mod_name = Util.mod_name(ctx, [Macro.camelize(svc.name)])
actor_name = Macro.camelize(svc.name)
Expand All @@ -65,14 +66,19 @@ defmodule Sidecar.GRPC.Generators.HandlerGenerator do
actor_name: actor_name,
service_name: mod_name,
methods: methods,
version: Util.version()
version: Util.version(),
render: true
]}
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

defp opts(nil), do: %{}

defp opts(%Google.Protobuf.MethodOptions{__pb_extensions__: extensions})
when extensions == %{} do
%{}
Expand Down
26 changes: 5 additions & 21 deletions lib/sidecar/grpc/generators/handler_transcoding_generator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,7 @@ defmodule Sidecar.GRPC.Generators.HandlerTranscodingGenerator do
end

@impl true
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: svcs} = _desc) do
do_generate(ctx, svcs)
end

defp do_generate(_ctx, nil),
do:
{"unknown",
[
render: false,
module: "Unknown"
]}

defp do_generate(_ctx, []),
do:
{"unknown",
[
render: false,
module: "Unknown"
]}

defp do_generate(ctx, svcs) do
def generate(ctx, %Google.Protobuf.FileDescriptorProto{service: [_ | _] = svcs} = _desc) do
for svc <- svcs do
mod_name = Util.mod_name(ctx, [Macro.camelize(svc.name)])
actor_name = Macro.camelize(svc.name)
Expand Down Expand Up @@ -93,9 +73,13 @@ 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

defp opts(nil), do: %{}

defp opts(%Google.Protobuf.MethodOptions{__pb_extensions__: extensions})
when extensions == %{} do
%{}
Expand Down
3 changes: 2 additions & 1 deletion spawn_operator/spawn_operator/lib/spawn_operator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ defmodule SpawnOperator do
Map.get(annotations, "spawn-eigr.io/actors-global-backpressure-min-demand", "-1"),
actors_global_backpressure_enabled:
Map.get(annotations, "spawn-eigr.io/actors-global-backpressure-enabled", "true"),
grpc_include_protos_path: Map.get(annotations, "spawn-eigr.io/grpc-include-protos-path", "/shared/protos"),
grpc_include_protos_path:
Map.get(annotations, "spawn-eigr.io/grpc-include-protos-path", "/shared/protos")
}
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ defmodule SpawnOperator.K8s.Proxy.CM.Configmap do
"ACTORS_GLOBAL_BACKPRESSURE_MIN_DEMAND" =>
annotations.actors_global_backpressure_min_demand,
"ACTORS_GLOBAL_BACKPRESSURE_ENABLED" => annotations.actors_global_backpressure_enabled,
"PROXY_GRPC_INCLUDE_PROTOS_PATH" => annotations.grpc_include_protos_path,
"PROXY_GRPC_INCLUDE_PROTOS_PATH" => annotations.grpc_include_protos_path
}
}
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ defmodule SpawnOperator.K8s.Proxy.Deployment do
"name" => "shared-volume",
"emptyDir" => %{}
}


@default_certs_volume %{
"name" => "certs",
Expand Down

0 comments on commit e610d4d

Please sign in to comment.