Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions lib/protobuf/protoc/cli.ex
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ defmodule Protobuf.Protoc.CLI do
parse_params(ctx, t)
end

def parse_params(ctx, ["using_module=" <> using_module | t]) do
ctx = %{ctx | using_module: using_module}
parse_params(ctx, t)
end

def parse_params(ctx, _), do: ctx

@doc false
Expand Down
5 changes: 4 additions & 1 deletion lib/protobuf/protoc/context.ex
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ defmodule Protobuf.Protoc.Context do
gen_descriptors?: false,

# Elixirpb.FileOptions
custom_file_options: %{}
custom_file_options: %{},

# Allow custom code injection
using_module: "Protobuf"

def cal_file_options(ctx, nil) do
%{ctx | custom_file_options: %{}, module_prefix: ctx.package || ""}
Expand Down
9 changes: 8 additions & 1 deletion lib/protobuf/protoc/generator/enum.ex
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,14 @@ defmodule Protobuf.Protoc.Generator.Enum do
generate_desc = if ctx.gen_descriptors?, do: desc, else: nil
type = generate_type(desc.value)

Protobuf.Protoc.Template.enum(msg_name, msg_opts(ctx, desc), fields, type, generate_desc)
Protobuf.Protoc.Template.enum(
msg_name,
msg_opts(ctx, desc),
fields,
type,
generate_desc,
ctx.using_module
)
end

def generate_type(fields) do
Expand Down
2 changes: 1 addition & 1 deletion lib/protobuf/protoc/generator/extension.ex
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ defmodule Protobuf.Protoc.Generator.Extension do
else
name = Util.trans_name(@ext_postfix)
msg_name = Util.mod_name(ctx, ns ++ [name])
Protobuf.Protoc.Template.extension(msg_name, msg_opts(ctx, desc), extends)
Protobuf.Protoc.Template.extension(msg_name, msg_opts(ctx, desc), extends, ctx.using_module)
end
end

Expand Down
6 changes: 4 additions & 2 deletions lib/protobuf/protoc/generator/message.ex
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ defmodule Protobuf.Protoc.Generator.Message do
fields: fields,
oneofs: oneofs_str(desc.oneof_decl),
desc: generate_desc,
extensions: extensions
extensions: extensions,
using_module: ctx.using_module
}
end

Expand All @@ -47,7 +48,8 @@ defmodule Protobuf.Protoc.Generator.Message do
msg_struct[:oneofs],
gen_fields(syntax, msg_struct[:fields]),
msg_struct[:desc],
gen_extensions(msg_struct[:extensions])
gen_extensions(msg_struct[:extensions]),
msg_struct[:using_module]
)
end

Expand Down
22 changes: 19 additions & 3 deletions lib/protobuf/protoc/template.ex
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,33 @@ defmodule Protobuf.Protoc.Template do
:def,
:message,
@msg_tmpl,
[:name, :options, :struct_fields, :typespec, :oneofs, :fields, :desc, :extensions],
[
:name,
:options,
:struct_fields,
:typespec,
:oneofs,
:fields,
:desc,
:extensions,
:using_module
],
trim: true
)

EEx.function_from_file(:def, :enum, @enum_tmpl, [:name, :options, :fields, :type, :desc],
EEx.function_from_file(
:def,
:enum,
@enum_tmpl,
[:name, :options, :fields, :type, :desc, :using_module],
trim: true
)

EEx.function_from_file(:def, :service, @svc_tmpl, [:mod_name, :name, :methods, :desc],
trim: true
)

EEx.function_from_file(:def, :extension, @ext_tmpl, [:name, :options, :extends], trim: true)
EEx.function_from_file(:def, :extension, @ext_tmpl, [:name, :options, :extends, :using_module],
trim: true
)
end
4 changes: 2 additions & 2 deletions priv/templates/enum.ex.eex
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule <%= name %> do
@moduledoc false
use Protobuf<%= options %>
use <%= using_module %><%= options %>

<%= type %>

<%= if not is_nil(desc) do %>
Expand Down
2 changes: 1 addition & 1 deletion priv/templates/extension.ex.eex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
defmodule <%= name %> do
@moduledoc false
use Protobuf<%= options %>
use <%= using_module %><%= options %>

<%= for ext <- extends do %> extend <%= ext %>
<% end %>
Expand Down
2 changes: 1 addition & 1 deletion priv/templates/message.ex.eex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
defmodule <%= name %> do
@moduledoc false
use Protobuf<%= options %>
use <%= using_module %><%= options %>

<%= typespec %>
defstruct [<%= struct_fields %>]
Expand Down