@@ -225,6 +225,37 @@ mod content {
225225 }
226226 }
227227
228+ fn content_clone < ' de > ( content : & Content < ' de > ) -> Content < ' de > {
229+ match content {
230+ Content :: Bool ( b) => Content :: Bool ( * b) ,
231+ Content :: U8 ( n) => Content :: U8 ( * n) ,
232+ Content :: U16 ( n) => Content :: U16 ( * n) ,
233+ Content :: U32 ( n) => Content :: U32 ( * n) ,
234+ Content :: U64 ( n) => Content :: U64 ( * n) ,
235+ Content :: I8 ( n) => Content :: I8 ( * n) ,
236+ Content :: I16 ( n) => Content :: I16 ( * n) ,
237+ Content :: I32 ( n) => Content :: I32 ( * n) ,
238+ Content :: I64 ( n) => Content :: I64 ( * n) ,
239+ Content :: F32 ( f) => Content :: F32 ( * f) ,
240+ Content :: F64 ( f) => Content :: F64 ( * f) ,
241+ Content :: Char ( c) => Content :: Char ( * c) ,
242+ Content :: String ( s) => Content :: String ( s. clone ( ) ) ,
243+ Content :: Str ( s) => Content :: Str ( * s) ,
244+ Content :: ByteBuf ( b) => Content :: ByteBuf ( b. clone ( ) ) ,
245+ Content :: Bytes ( b) => Content :: Bytes ( b) ,
246+ Content :: None => Content :: None ,
247+ Content :: Some ( content) => Content :: Some ( Box :: new ( content_clone ( content) ) ) ,
248+ Content :: Unit => Content :: Unit ,
249+ Content :: Newtype ( content) => Content :: Newtype ( Box :: new ( content_clone ( content) ) ) ,
250+ Content :: Seq ( seq) => Content :: Seq ( seq. iter ( ) . map ( content_clone) . collect ( ) ) ,
251+ Content :: Map ( map) => Content :: Map (
252+ map. iter ( )
253+ . map ( |( k, v) | ( content_clone ( k) , content_clone ( v) ) )
254+ . collect ( ) ,
255+ ) ,
256+ }
257+ }
258+
228259 #[ cold]
229260 fn content_unexpected < ' a , ' de > ( content : & ' a Content < ' de > ) -> Unexpected < ' a > {
230261 match * content {
@@ -2158,7 +2189,7 @@ mod content {
21582189 V : Visitor < ' de , Value = Content < ' de > > ,
21592190 {
21602191 let _ = visitor;
2161- Ok ( self . content . clone ( ) )
2192+ Ok ( content_clone ( self . content ) )
21622193 }
21632194 }
21642195
0 commit comments