@@ -25,15 +25,25 @@ pub enum Error {
2525 /// Failed to write MessagePack'ed single-byte value into the write.
2626 InvalidFixedValueWrite ( WriteError ) ,
2727 InvalidValueWrite ( ValueWriteError ) ,
28+
29+ /// Failed to serialize struct, sequence or map, because its length is unknown.
30+ UnknownLength ,
2831}
2932
3033impl :: std:: error:: Error for Error {
31- fn description ( & self ) -> & str { "an error occurred while writing encoded value" }
34+ fn description ( & self ) -> & str {
35+ match * self {
36+ Error :: InvalidFixedValueWrite ( ..) => "invalid fixed value write" ,
37+ Error :: InvalidValueWrite ( ..) => "invalid value write" ,
38+ Error :: UnknownLength => "attempt to serialize struct, sequence or map with unknown length" ,
39+ }
40+ }
3241
3342 fn cause ( & self ) -> Option < & :: std:: error:: Error > {
3443 match * self {
3544 Error :: InvalidFixedValueWrite ( ref err) => Some ( err) ,
3645 Error :: InvalidValueWrite ( ref err) => Some ( err) ,
46+ Error :: UnknownLength => None ,
3747 }
3848 }
3949}
@@ -229,7 +239,7 @@ impl<'a, W: VariantWriter> serde::Serializer for Serializer<'a, W> {
229239
230240 let len = match visitor. len ( ) {
231241 Some ( len) => len,
232- None => panic ! ( "do not know how to serialize a sequence with no length" ) ,
242+ None => return Err ( Error :: UnknownLength ) ,
233243 } ;
234244
235245 // ... and its arguments length.
@@ -266,7 +276,7 @@ impl<'a, W: VariantWriter> serde::Serializer for Serializer<'a, W> {
266276 {
267277 let len = match visitor. len ( ) {
268278 Some ( len) => len,
269- None => panic ! ( "do not know how to serialize a sequence with no length" ) ,
279+ None => return Err ( Error :: UnknownLength ) ,
270280 } ;
271281
272282 try!( write_array_len ( & mut self . wr , len as u32 ) ) ;
@@ -287,7 +297,7 @@ impl<'a, W: VariantWriter> serde::Serializer for Serializer<'a, W> {
287297 {
288298 let len = match visitor. len ( ) {
289299 Some ( len) => len,
290- None => panic ! ( "do not know how to serialize a map with no length" ) ,
300+ None => return Err ( Error :: UnknownLength ) ,
291301 } ;
292302
293303 try!( write_map_len ( & mut self . wr , len as u32 ) ) ;
@@ -316,7 +326,7 @@ impl<'a, W: VariantWriter> serde::Serializer for Serializer<'a, W> {
316326 {
317327 let len = match visitor. len ( ) {
318328 Some ( len) => len,
319- None => panic ! ( "do not know how to serialize a sequence with no length" ) ,
329+ None => return Err ( Error :: UnknownLength ) ,
320330 } ;
321331
322332 try!( self . vw . write_struct_len ( & mut self . wr , len as u32 ) ) ;
0 commit comments