Packages

A pure Elixir implementation of Google Protobuf. A fork of tony612's package.

Current section

Files

Jump to
protocol_buffers lib protobuf protoc generator service.ex
Raw

lib/protobuf/protoc/generator/service.ex

defmodule Protobuf.Protoc.Generator.Service do
alias Protobuf.Protoc.Generator.Util
def generate_list(ctx, descs) do
if Enum.member?(ctx.plugins, "grpc") do
Enum.map(descs, fn desc -> generate(ctx, desc) end)
else
[]
end
end
def generate(ctx, desc) do
# service can't be nested
mod_name = Util.mod_name(ctx, [Util.trans_name(desc.name)])
name = Util.attach_raw_pkg(desc.name, ctx.package)
methods = Enum.map(desc.method, fn m -> generate_service_method(ctx, m) end)
Protobuf.Protoc.Template.service(mod_name, name, methods)
end
defp generate_service_method(ctx, m) do
input = service_arg(Util.type_from_type_name(ctx, m.input_type), m.client_streaming)
output = service_arg(Util.type_from_type_name(ctx, m.output_type), m.server_streaming)
":#{m.name}, #{input}, #{output}"
end
defp service_arg(type, true), do: "stream(#{type})"
defp service_arg(type, _), do: type
end