Skip to content

Commit cf141aa

Browse files
committed
Move Content's Clone impl from serde_core to serde
1 parent ff3aee4 commit cf141aa

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

serde/src/private/de.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

serde_core/src/private/content.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use crate::private::size_hint;
88
// Not public API. Use serde-value instead.
99
//
1010
// Obsoleted by format-specific buffer types (https://github.com/serde-rs/serde/pull/2912).
11-
#[derive(Clone)]
1211
#[doc(hidden)]
1312
pub enum Content<'de> {
1413
Bool(bool),

0 commit comments

Comments
 (0)