@@ -60,17 +60,21 @@ defmodule Protobuf.Encoder do
60
60
end
61
61
62
62
acc =
63
- case encode_field ( class_field ( prop ) , val , syntax , prop ) do
63
+ case encode_field ( prop , struct . __struct__ , val , syntax ) do
64
64
{ :ok , iodata } -> [ acc | iodata ]
65
65
:skip -> acc
66
66
end
67
67
68
68
encode_fields ( rest , syntax , struct , oneofs , acc )
69
+ end
70
+
71
+ defp encode_field ( prop , struct_mod , val , syntax ) do
72
+ do_encode_field ( class_field ( prop ) , val , syntax , prop )
69
73
rescue
70
74
error ->
71
75
raise Protobuf.EncodeError ,
72
76
message:
73
- "Got error when encoding #{ inspect ( struct . __struct__ ) } ##{ prop . name_atom } : #{ Exception . format ( :error , error ) } "
77
+ "Got error when encoding #{ inspect ( struct_mod ) } ##{ prop . name_atom } : #{ Exception . format ( :error , error ) } "
74
78
end
75
79
76
80
defp skip_field? ( _syntax , [ ] , _prop ) , do: true
@@ -88,7 +92,7 @@ defmodule Protobuf.Encoder do
88
92
defp skip_field? ( :proto3 , false , % FieldProps { oneof: nil } ) , do: true
89
93
defp skip_field? ( _syntax , _val , _prop ) , do: false
90
94
91
- defp encode_field (
95
+ defp do_encode_field (
92
96
:normal ,
93
97
val ,
94
98
syntax ,
@@ -102,11 +106,11 @@ defmodule Protobuf.Encoder do
102
106
end
103
107
end
104
108
105
- defp encode_field ( :embedded , _val = nil , _syntax , _prop ) do
109
+ defp do_encode_field ( :embedded , _val = nil , _syntax , _prop ) do
106
110
:skip
107
111
end
108
112
109
- defp encode_field (
113
+ defp do_encode_field (
110
114
:embedded ,
111
115
val ,
112
116
syntax ,
@@ -131,7 +135,7 @@ defmodule Protobuf.Encoder do
131
135
{ :ok , result }
132
136
end
133
137
134
- defp encode_field ( :packed , val , syntax , % FieldProps { type: type , encoded_fnum: fnum } = prop ) do
138
+ defp do_encode_field ( :packed , val , syntax , % FieldProps { type: type , encoded_fnum: fnum } = prop ) do
135
139
if skip_field? ( syntax , val , prop ) or skip_enum? ( syntax , val , prop ) do
136
140
:skip
137
141
else
@@ -251,7 +255,7 @@ defmodule Protobuf.Encoder do
251
255
Enum . reduce ( pb_exts , [ ] , fn { { ext_mod , key } , val } , acc ->
252
256
case Protobuf.Extension . get_extension_props ( mod , ext_mod , key ) do
253
257
% { field_props: prop } ->
254
- case encode_field ( class_field ( prop ) , val , :proto2 , prop ) do
258
+ case do_encode_field ( class_field ( prop ) , val , :proto2 , prop ) do
255
259
{ :ok , iodata } -> [ acc | iodata ]
256
260
:skip -> acc
257
261
end
0 commit comments