@@ -44,45 +44,50 @@ defmodule Protobuf.Text do
4444 defp encode_struct ( % _ { } = struct , message_props , root? , print_unknown? ) do
4545 % { syntax: syntax } = message_props
4646
47- fields =
48- struct
49- |> Map . drop ( [ :__unknown_fields__ , :__struct__ , :__pb_extensions__ ] )
50- |> Enum . sort ( )
51-
52- unknown_fields =
53- if print_unknown? do
54- struct
55- |> Map . get ( :__unknown_fields__ )
56- |> Enum . map ( fn { field_number , _wire_type , value } -> { field_number , value } end )
57- else
58- [ ]
59- end
47+ fields = prepare_fields ( struct , print_unknown? )
6048
6149 if root? do
62- Enum . reduce ( fields ++ unknown_fields , [ ] , fn value , acc ->
63- doc = encode_struct_field ( value , syntax , message_props , print_unknown? )
50+ empty = Algebra . empty ( )
6451
65- if doc == Algebra . empty ( ) do
66- acc
67- else
68- [ doc | acc ]
52+ fields
53+ |> Enum . reduce ( [ ] , fn value , acc ->
54+ case encode_struct_field ( value , syntax , message_props , print_unknown? ) do
55+ ^ empty -> acc
56+ doc -> [ Algebra . break ( ", " ) , doc | acc ]
6957 end
7058 end )
59+ |> safe_tail ( )
7160 |> Enum . reverse ( )
72- |> Enum . intersperse ( Algebra . break ( ", " ) )
7361 |> Algebra . concat ( )
7462 |> Algebra . group ( )
7563 else
7664 fun = fn value , _opts ->
7765 encode_struct_field ( value , syntax , message_props , print_unknown? )
7866 end
7967
80- Algebra . container_doc ( "{" , fields ++ unknown_fields , "}" , inspect_opts ( ) , fun ,
81- break: :strict
82- )
68+ Algebra . container_doc ( "{" , fields , "}" , inspect_opts ( ) , fun , break: :strict )
8369 end
8470 end
8571
72+ defp prepare_fields ( struct , print_unknown? ) do
73+ unknown_fields =
74+ if print_unknown? do
75+ Enum . map ( struct . __unknown_fields__ , fn { field_number , _wire_type , value } ->
76+ { field_number , value }
77+ end )
78+ else
79+ [ ]
80+ end
81+
82+ struct
83+ |> Map . drop ( [ :__unknown_fields__ , :__struct__ , :__pb_extensions__ ] )
84+ |> Enum . sort ( )
85+ |> Kernel . ++ ( unknown_fields )
86+ end
87+
88+ defp safe_tail ( [ ] ) , do: [ ]
89+ defp safe_tail ( [ _head | tail ] ) , do: tail
90+
8691 @ spec encode_struct_field (
8792 { atom ( ) | integer ( ) , term ( ) } ,
8893 :proto2 | :proto3 ,
0 commit comments