Skip to content

Commit c8e0a52

Browse files
Add compiler option to swap out using module (#1)
* usurp using macro * address missed message types and fix Elixir.Protobuf problem * fix spacing
1 parent 242be79 commit c8e0a52

File tree

9 files changed

+45
-12
lines changed

9 files changed

+45
-12
lines changed

lib/protobuf/protoc/cli.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ defmodule Protobuf.Protoc.CLI do
6666
parse_params(ctx, t)
6767
end
6868

69+
def parse_params(ctx, ["using_module=" <> using_module | t]) do
70+
ctx = %{ctx | using_module: using_module}
71+
parse_params(ctx, t)
72+
end
73+
6974
def parse_params(ctx, _), do: ctx
7075

7176
@doc false

lib/protobuf/protoc/context.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ defmodule Protobuf.Protoc.Context do
2929
gen_descriptors?: false,
3030

3131
# Elixirpb.FileOptions
32-
custom_file_options: %{}
32+
custom_file_options: %{},
33+
34+
# Allow custom code injection
35+
using_module: "Protobuf"
3336

3437
def cal_file_options(ctx, nil) do
3538
%{ctx | custom_file_options: %{}, module_prefix: ctx.package || ""}

lib/protobuf/protoc/generator/enum.ex

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,14 @@ defmodule Protobuf.Protoc.Generator.Enum do
1313
generate_desc = if ctx.gen_descriptors?, do: desc, else: nil
1414
type = generate_type(desc.value)
1515

16-
Protobuf.Protoc.Template.enum(msg_name, msg_opts(ctx, desc), fields, type, generate_desc)
16+
Protobuf.Protoc.Template.enum(
17+
msg_name,
18+
msg_opts(ctx, desc),
19+
fields,
20+
type,
21+
generate_desc,
22+
ctx.using_module
23+
)
1724
end
1825

1926
def generate_type(fields) do

lib/protobuf/protoc/generator/extension.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ defmodule Protobuf.Protoc.Generator.Extension do
2424
else
2525
name = Util.trans_name(@ext_postfix)
2626
msg_name = Util.mod_name(ctx, ns ++ [name])
27-
Protobuf.Protoc.Template.extension(msg_name, msg_opts(ctx, desc), extends)
27+
Protobuf.Protoc.Template.extension(msg_name, msg_opts(ctx, desc), extends, ctx.using_module)
2828
end
2929
end
3030

lib/protobuf/protoc/generator/message.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ defmodule Protobuf.Protoc.Generator.Message do
3434
fields: fields,
3535
oneofs: oneofs_str(desc.oneof_decl),
3636
desc: generate_desc,
37-
extensions: extensions
37+
extensions: extensions,
38+
using_module: ctx.using_module
3839
}
3940
end
4041

@@ -47,7 +48,8 @@ defmodule Protobuf.Protoc.Generator.Message do
4748
msg_struct[:oneofs],
4849
gen_fields(syntax, msg_struct[:fields]),
4950
msg_struct[:desc],
50-
gen_extensions(msg_struct[:extensions])
51+
gen_extensions(msg_struct[:extensions]),
52+
msg_struct[:using_module]
5153
)
5254
end
5355

lib/protobuf/protoc/template.ex

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,33 @@ defmodule Protobuf.Protoc.Template do
1111
:def,
1212
:message,
1313
@msg_tmpl,
14-
[:name, :options, :struct_fields, :typespec, :oneofs, :fields, :desc, :extensions],
14+
[
15+
:name,
16+
:options,
17+
:struct_fields,
18+
:typespec,
19+
:oneofs,
20+
:fields,
21+
:desc,
22+
:extensions,
23+
:using_module
24+
],
1525
trim: true
1626
)
1727

18-
EEx.function_from_file(:def, :enum, @enum_tmpl, [:name, :options, :fields, :type, :desc],
28+
EEx.function_from_file(
29+
:def,
30+
:enum,
31+
@enum_tmpl,
32+
[:name, :options, :fields, :type, :desc, :using_module],
1933
trim: true
2034
)
2135

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

26-
EEx.function_from_file(:def, :extension, @ext_tmpl, [:name, :options, :extends], trim: true)
40+
EEx.function_from_file(:def, :extension, @ext_tmpl, [:name, :options, :extends, :using_module],
41+
trim: true
42+
)
2743
end

priv/templates/enum.ex.eex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule <%= name %> do
22
@moduledoc false
3-
use Protobuf<%= options %>
4-
3+
use <%= using_module %><%= options %>
4+
55
<%= type %>
66

77
<%= if not is_nil(desc) do %>

priv/templates/extension.ex.eex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
defmodule <%= name %> do
22
@moduledoc false
3-
use Protobuf<%= options %>
3+
use <%= using_module %><%= options %>
44

55
<%= for ext <- extends do %> extend <%= ext %>
66
<% end %>

priv/templates/message.ex.eex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
defmodule <%= name %> do
22
@moduledoc false
3-
use Protobuf<%= options %>
3+
use <%= using_module %><%= options %>
44

55
<%= typespec %>
66
defstruct [<%= struct_fields %>]

0 commit comments

Comments
 (0)