@@ -99,6 +99,7 @@ impl PydanticSerializationError {
9999#[ derive( Debug , Clone ) ]
100100pub struct PydanticSerializationUnexpectedValue {
101101 message : Option < String > ,
102+ field_name : Option < String > ,
102103 field_type : Option < String > ,
103104 input_value : Option < Py < PyAny > > ,
104105}
@@ -107,30 +108,43 @@ impl PydanticSerializationUnexpectedValue {
107108 pub fn new_from_msg ( message : Option < String > ) -> Self {
108109 Self {
109110 message,
111+ field_name : None ,
110112 field_type : None ,
111113 input_value : None ,
112114 }
113115 }
114116
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 {
116122 Self {
117123 message : None ,
124+ field_name,
118125 field_type,
119126 input_value,
120127 }
121128 }
122129
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 {
124136 Self {
125137 message,
138+ field_name,
126139 field_type,
127140 input_value,
128141 }
129142 }
130143
131144 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 > > ) > ( (
133146 self . message . clone ( ) ,
147+ self . field_name . clone ( ) ,
134148 self . field_type . clone ( ) ,
135149 self . input_value . clone ( ) ,
136150 ) )
@@ -140,10 +154,16 @@ impl PydanticSerializationUnexpectedValue {
140154#[ pymethods]
141155impl PydanticSerializationUnexpectedValue {
142156 #[ 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 {
145164 Self {
146165 message,
166+ field_name,
147167 field_type,
148168 input_value,
149169 }
@@ -172,8 +192,16 @@ impl PydanticSerializationUnexpectedValue {
172192
173193 let value_str = truncate_safe_repr ( bound_input, None ) ;
174194
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+ )
176200 . 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+ }
177205 }
178206
179207 if message. is_empty ( ) {
0 commit comments