File tree 4 files changed +33
-10
lines changed
4 files changed +33
-10
lines changed Original file line number Diff line number Diff line change @@ -768,10 +768,18 @@ impl<'de> serde::Deserializer<'de> for MapKeyDeserializer {
768
768
}
769
769
}
770
770
771
- pub fn from_value < T : DeserializeOwned > ( value : ConvexValue ) -> Result < T , Error > {
772
- T :: deserialize ( value)
771
+ pub fn from_value < T : DeserializeOwned > ( value : ConvexValue ) -> anyhow:: Result < T > {
772
+ match T :: deserialize ( value) {
773
+ Err ( Error :: Anyhow ( e) ) => Err ( e) ,
774
+ Err ( e) => Err ( e. into ( ) ) ,
775
+ Ok ( value) => Ok ( value) ,
776
+ }
773
777
}
774
778
775
- pub fn from_object < T : DeserializeOwned > ( value : ConvexObject ) -> Result < T , Error > {
776
- T :: deserialize ( ConvexValue :: Object ( value) )
779
+ pub fn from_object < T : DeserializeOwned > ( value : ConvexObject ) -> anyhow:: Result < T > {
780
+ match T :: deserialize ( ConvexValue :: Object ( value) ) {
781
+ Err ( Error :: Anyhow ( e) ) => Err ( e) ,
782
+ Err ( e) => Err ( e. into ( ) ) ,
783
+ Ok ( value) => Ok ( value) ,
784
+ }
777
785
}
Original file line number Diff line number Diff line change @@ -27,7 +27,7 @@ macro_rules! codegen_convex_serialization {
27
27
type Error = anyhow:: Error ;
28
28
29
29
fn try_from( s: $struct) -> anyhow:: Result <value:: ConvexObject > {
30
- Ok ( value:: serde:: to_object( $serialized_struct:: try_from( s) ? ) ?)
30
+ value:: serde:: to_object( $serialized_struct:: try_from( s) ?)
31
31
}
32
32
}
33
33
Original file line number Diff line number Diff line change @@ -22,7 +22,7 @@ use crate::{
22
22
} ;
23
23
24
24
#[ derive( thiserror:: Error ) ]
25
- pub enum Error {
25
+ enum Error {
26
26
#[ error( "Integer isn't in range for ConvexValue::Int64: {0:?}." ) ]
27
27
IntegerOutofRange ( #[ from] TryFromIntError ) ,
28
28
@@ -668,10 +668,14 @@ impl serde::ser::SerializeStruct for SerializeObject {
668
668
}
669
669
}
670
670
671
- pub fn to_value < T : Serialize > ( value : T ) -> Result < ConvexValue > {
672
- value. serialize ( Serializer )
671
+ pub fn to_value < T : Serialize > ( value : T ) -> anyhow:: Result < ConvexValue > {
672
+ match value. serialize ( Serializer ) {
673
+ Err ( Error :: Anyhow ( e) ) => Err ( e) ,
674
+ Err ( e) => Err ( e. into ( ) ) ,
675
+ Ok ( value) => Ok ( value) ,
676
+ }
673
677
}
674
678
675
- pub fn to_object < T : Serialize > ( value : T ) -> Result < ConvexObject > {
676
- Ok ( to_value ( value) ?. try_into ( ) ? )
679
+ pub fn to_object < T : Serialize > ( value : T ) -> anyhow :: Result < ConvexObject > {
680
+ to_value ( value) ?. try_into ( )
677
681
}
Original file line number Diff line number Diff line change @@ -192,7 +192,9 @@ impl<'de> Deserialize<'de> for FieldName {
192
192
193
193
#[ cfg( test) ]
194
194
mod tests {
195
+ use errors:: ErrorMetadataAnyhowExt ;
195
196
use proptest:: prelude:: * ;
197
+ use serde_json:: json;
196
198
197
199
use crate :: {
198
200
serde:: {
@@ -225,4 +227,13 @@ mod tests {
225
227
assert_eq!( start, deserialized) ;
226
228
}
227
229
}
230
+
231
+ #[ test]
232
+ fn test_error_metadata ( ) {
233
+ // Regression test, checking that error metadata is piped through.
234
+ let big_json = json ! ( "a" . repeat( 64_000_000 ) ) ;
235
+ let serialize_result = to_value ( big_json) ;
236
+ let anyhow_err: anyhow:: Error = serialize_result. unwrap_err ( ) ;
237
+ assert ! ( anyhow_err. is_bad_request( ) ) ;
238
+ }
228
239
}
You can’t perform that action at this time.
0 commit comments