@@ -11,6 +11,8 @@ defmodule Protobuf.Protoc.Generator.Message do
1111 end
1212
1313 def generate ( ctx , desc ) do
14+ IO . inspect ( :stderr , desc , label: :desc )
15+
1416 msg_struct = parse_desc ( ctx , desc )
1517 IO . inspect ( :stderr , msg_struct , label: :message_struct )
1618 ctx = % { ctx | namespace: msg_struct [ :new_namespace ] }
@@ -293,13 +295,32 @@ defmodule Protobuf.Protoc.Generator.Message do
293295 end
294296
295297 defp merge_field_options ( opts , f ) do
296- extype_options = Google.Protobuf.FieldOptions . get_extension ( f . options , Brex.Elixir.PbExtension , :field )
297-
298- IO . inspect ( :stderr , { opts , f . options , extype_options } , label: :together )
298+ field_options =
299+ f . options
300+ |> Google.Protobuf.FieldOptions . get_extension ( Elixirpb.PbExtension , :field )
301+ |> case do
302+ nil -> nil
303+ elixir_field_options ->
304+ elixir_field_options
305+ # strips :__struct__
306+ |> Map . from_struct ( )
307+ |> Enum . flat_map ( & get_custom_field_options / 1 )
308+ |> case do
309+ [ ] -> nil
310+ custom_opts -> custom_opts
311+ end
312+ end
299313
300314 opts
301- |> Map . put ( :packed , f . options . packed )
302- |> Map . put ( :deprecated , f . options . deprecated )
303- |> Map . put ( :options , "#{ inspect ( extype_options ) } " )
315+ |> Map . put ( :packed , f . options . packed )
316+ |> Map . put ( :deprecated , f . options . deprecated )
317+ |> Map . put ( :options , field_options )
318+ end
319+
320+ def get_custom_field_options ( { :__pb_extensions__ , opts } ) do
321+ # For now if you want field options to show up in DSL you havee to extend Elixirpb.FieldOptions.
322+ Enum . map ( opts , fn { { _extending_message , field } , arg } -> { field , arg } end )
304323 end
324+ # Collect existing Elixirpb.FieldOptions (right now no fields though).
325+ def get_custom_field_options ( { k , v } ) , do: [ { k , v } ]
305326end
0 commit comments