@@ -99,6 +99,7 @@ impl PydanticSerializationError {
99
99
#[ derive( Debug , Clone ) ]
100
100
pub struct PydanticSerializationUnexpectedValue {
101
101
message : Option < String > ,
102
+ field_name : Option < String > ,
102
103
field_type : Option < String > ,
103
104
input_value : Option < Py < PyAny > > ,
104
105
}
@@ -107,30 +108,43 @@ impl PydanticSerializationUnexpectedValue {
107
108
pub fn new_from_msg ( message : Option < String > ) -> Self {
108
109
Self {
109
110
message,
111
+ field_name : None ,
110
112
field_type : None ,
111
113
input_value : None ,
112
114
}
113
115
}
114
116
115
- pub fn new_from_parts ( field_type : Option < String > , input_value : Option < Py < PyAny > > ) -> Self {
117
+ pub fn new_from_parts (
118
+ field_name : Option < String > ,
119
+ field_type : Option < String > ,
120
+ input_value : Option < Py < PyAny > > ,
121
+ ) -> Self {
116
122
Self {
117
123
message : None ,
124
+ field_name,
118
125
field_type,
119
126
input_value,
120
127
}
121
128
}
122
129
123
- pub fn new ( message : Option < String > , field_type : Option < String > , input_value : Option < Py < PyAny > > ) -> Self {
130
+ pub fn new (
131
+ message : Option < String > ,
132
+ field_name : Option < String > ,
133
+ field_type : Option < String > ,
134
+ input_value : Option < Py < PyAny > > ,
135
+ ) -> Self {
124
136
Self {
125
137
message,
138
+ field_name,
126
139
field_type,
127
140
input_value,
128
141
}
129
142
}
130
143
131
144
pub fn to_py_err ( & self ) -> PyErr {
132
- PyErr :: new :: < Self , ( Option < String > , Option < String > , Option < Py < PyAny > > ) > ( (
145
+ PyErr :: new :: < Self , ( Option < String > , Option < String > , Option < String > , Option < Py < PyAny > > ) > ( (
133
146
self . message . clone ( ) ,
147
+ self . field_name . clone ( ) ,
134
148
self . field_type . clone ( ) ,
135
149
self . input_value . clone ( ) ,
136
150
) )
@@ -140,10 +154,16 @@ impl PydanticSerializationUnexpectedValue {
140
154
#[ pymethods]
141
155
impl PydanticSerializationUnexpectedValue {
142
156
#[ new]
143
- #[ pyo3( signature = ( message=None , field_type=None , input_value=None , /) ) ]
144
- fn py_new ( message : Option < String > , field_type : Option < String > , input_value : Option < Py < PyAny > > ) -> Self {
157
+ #[ pyo3( signature = ( message=None , field_name=None , field_type=None , input_value=None , /) ) ]
158
+ fn py_new (
159
+ message : Option < String > ,
160
+ field_name : Option < String > ,
161
+ field_type : Option < String > ,
162
+ input_value : Option < Py < PyAny > > ,
163
+ ) -> Self {
145
164
Self {
146
165
message,
166
+ field_name,
147
167
field_type,
148
168
input_value,
149
169
}
@@ -172,8 +192,16 @@ impl PydanticSerializationUnexpectedValue {
172
192
173
193
let value_str = truncate_safe_repr ( bound_input, None ) ;
174
194
175
- write ! ( message, " [input_value={value_str}, input_type={input_type}]" )
195
+ if let Some ( field_name) = & self . field_name {
196
+ write ! (
197
+ message,
198
+ " [field_name={field_name}, input_value={value_str}, input_type={input_type}]"
199
+ )
176
200
. expect ( "writing to string should never fail" ) ;
201
+ } else {
202
+ write ! ( message, " [input_value={value_str}, input_type={input_type}]" )
203
+ . expect ( "writing to string should never fail" ) ;
204
+ }
177
205
}
178
206
179
207
if message. is_empty ( ) {
0 commit comments