From be0730890002f24f778fa494401aadbdbf3abb57 Mon Sep 17 00:00:00 2001 From: Lizzie Paquette Date: Thu, 19 Mar 2020 16:21:32 -0700 Subject: [PATCH 1/3] usurp using macro --- lib/protobuf/protoc/cli.ex | 5 +++++ lib/protobuf/protoc/context.ex | 5 ++++- lib/protobuf/protoc/generator/message.ex | 6 ++++-- lib/protobuf/protoc/template.ex | 22 +++++++++++++++++++--- priv/templates/enum.ex.eex | 4 ++-- priv/templates/extension.ex.eex | 2 +- priv/templates/message.ex.eex | 2 +- 7 files changed, 36 insertions(+), 10 deletions(-) diff --git a/lib/protobuf/protoc/cli.ex b/lib/protobuf/protoc/cli.ex index 58a15047..f4a9d3aa 100644 --- a/lib/protobuf/protoc/cli.ex +++ b/lib/protobuf/protoc/cli.ex @@ -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 diff --git a/lib/protobuf/protoc/context.ex b/lib/protobuf/protoc/context.ex index 9c7dacbf..1cc3c10f 100644 --- a/lib/protobuf/protoc/context.ex +++ b/lib/protobuf/protoc/context.ex @@ -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 || ""} diff --git a/lib/protobuf/protoc/generator/message.ex b/lib/protobuf/protoc/generator/message.ex index 33d631a5..d1c399bc 100644 --- a/lib/protobuf/protoc/generator/message.ex +++ b/lib/protobuf/protoc/generator/message.ex @@ -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 @@ -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 diff --git a/lib/protobuf/protoc/template.ex b/lib/protobuf/protoc/template.ex index 2a07c454..bdbcba9f 100644 --- a/lib/protobuf/protoc/template.ex +++ b/lib/protobuf/protoc/template.ex @@ -11,11 +11,25 @@ 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 ) @@ -23,5 +37,7 @@ defmodule Protobuf.Protoc.Template do 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 diff --git a/priv/templates/enum.ex.eex b/priv/templates/enum.ex.eex index 690695ad..02c2ece2 100644 --- a/priv/templates/enum.ex.eex +++ b/priv/templates/enum.ex.eex @@ -1,7 +1,7 @@ defmodule <%= name %> do @moduledoc false - use Protobuf<%= options %> - + use <%= using_module %> <%= options %> + <%= type %> <%= if not is_nil(desc) do %> diff --git a/priv/templates/extension.ex.eex b/priv/templates/extension.ex.eex index 3c29c173..d58f968c 100644 --- a/priv/templates/extension.ex.eex +++ b/priv/templates/extension.ex.eex @@ -1,6 +1,6 @@ defmodule <%= name %> do @moduledoc false - use Protobuf<%= options %> + use <%= using_module %> <%= options %> <%= for ext <- extends do %> extend <%= ext %> <% end %> diff --git a/priv/templates/message.ex.eex b/priv/templates/message.ex.eex index 9f0aa76f..588c3624 100644 --- a/priv/templates/message.ex.eex +++ b/priv/templates/message.ex.eex @@ -1,6 +1,6 @@ defmodule <%= name %> do @moduledoc false - use Protobuf<%= options %> + use <%= using_module %> <%= options %> <%= typespec %> defstruct [<%= struct_fields %>] From 3de30a63dd0ef5df4910f9197098cbb0d4ab88de Mon Sep 17 00:00:00 2001 From: Lizzie Paquette Date: Thu, 19 Mar 2020 16:39:03 -0700 Subject: [PATCH 2/3] address missed message types and fix Elixir.Protobuf problem --- lib/protobuf/protoc/context.ex | 2 +- lib/protobuf/protoc/generator/enum.ex | 9 ++++++++- lib/protobuf/protoc/generator/extension.ex | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/protobuf/protoc/context.ex b/lib/protobuf/protoc/context.ex index 1cc3c10f..ce0e4fb2 100644 --- a/lib/protobuf/protoc/context.ex +++ b/lib/protobuf/protoc/context.ex @@ -32,7 +32,7 @@ defmodule Protobuf.Protoc.Context do custom_file_options: %{}, # Allow custom code injection - using_module: Protobuf + using_module: "Protobuf" def cal_file_options(ctx, nil) do %{ctx | custom_file_options: %{}, module_prefix: ctx.package || ""} diff --git a/lib/protobuf/protoc/generator/enum.ex b/lib/protobuf/protoc/generator/enum.ex index 9c3dd4b6..d258d5f5 100644 --- a/lib/protobuf/protoc/generator/enum.ex +++ b/lib/protobuf/protoc/generator/enum.ex @@ -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 diff --git a/lib/protobuf/protoc/generator/extension.ex b/lib/protobuf/protoc/generator/extension.ex index 8ce1d2b7..e5f19d99 100644 --- a/lib/protobuf/protoc/generator/extension.ex +++ b/lib/protobuf/protoc/generator/extension.ex @@ -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 From a20d496dd644bd62c44012a61506a72bfc08ffee Mon Sep 17 00:00:00 2001 From: Lizzie Paquette Date: Thu, 19 Mar 2020 16:59:53 -0700 Subject: [PATCH 3/3] fix spacing --- priv/templates/enum.ex.eex | 2 +- priv/templates/extension.ex.eex | 2 +- priv/templates/message.ex.eex | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/priv/templates/enum.ex.eex b/priv/templates/enum.ex.eex index 02c2ece2..d38080f0 100644 --- a/priv/templates/enum.ex.eex +++ b/priv/templates/enum.ex.eex @@ -1,6 +1,6 @@ defmodule <%= name %> do @moduledoc false - use <%= using_module %> <%= options %> + use <%= using_module %><%= options %> <%= type %> diff --git a/priv/templates/extension.ex.eex b/priv/templates/extension.ex.eex index d58f968c..da77f9bf 100644 --- a/priv/templates/extension.ex.eex +++ b/priv/templates/extension.ex.eex @@ -1,6 +1,6 @@ defmodule <%= name %> do @moduledoc false - use <%= using_module %> <%= options %> + use <%= using_module %><%= options %> <%= for ext <- extends do %> extend <%= ext %> <% end %> diff --git a/priv/templates/message.ex.eex b/priv/templates/message.ex.eex index 588c3624..9e5c970d 100644 --- a/priv/templates/message.ex.eex +++ b/priv/templates/message.ex.eex @@ -1,6 +1,6 @@ defmodule <%= name %> do @moduledoc false - use <%= using_module %> <%= options %> + use <%= using_module %><%= options %> <%= typespec %> defstruct [<%= struct_fields %>]