Move Content's Clone impl from serde_core to serde

This commit is contained in:
David Tolnay 2025-09-14 08:35:32 -07:00
parent ff3aee490a
commit cf141aa8c7
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
2 changed files with 32 additions and 2 deletions

View File

@ -225,6 +225,37 @@ mod content {
}
}
fn content_clone<'de>(content: &Content<'de>) -> Content<'de> {
match content {
Content::Bool(b) => Content::Bool(*b),
Content::U8(n) => Content::U8(*n),
Content::U16(n) => Content::U16(*n),
Content::U32(n) => Content::U32(*n),
Content::U64(n) => Content::U64(*n),
Content::I8(n) => Content::I8(*n),
Content::I16(n) => Content::I16(*n),
Content::I32(n) => Content::I32(*n),
Content::I64(n) => Content::I64(*n),
Content::F32(f) => Content::F32(*f),
Content::F64(f) => Content::F64(*f),
Content::Char(c) => Content::Char(*c),
Content::String(s) => Content::String(s.clone()),
Content::Str(s) => Content::Str(*s),
Content::ByteBuf(b) => Content::ByteBuf(b.clone()),
Content::Bytes(b) => Content::Bytes(b),
Content::None => Content::None,
Content::Some(content) => Content::Some(Box::new(content_clone(content))),
Content::Unit => Content::Unit,
Content::Newtype(content) => Content::Newtype(Box::new(content_clone(content))),
Content::Seq(seq) => Content::Seq(seq.iter().map(content_clone).collect()),
Content::Map(map) => Content::Map(
map.iter()
.map(|(k, v)| (content_clone(k), content_clone(v)))
.collect(),
),
}
}
#[cold]
fn content_unexpected<'a, 'de>(content: &'a Content<'de>) -> Unexpected<'a> {
match *content {
@ -2158,7 +2189,7 @@ mod content {
V: Visitor<'de, Value = Content<'de>>,
{
let _ = visitor;
Ok(self.content.clone())
Ok(content_clone(self.content))
}
}

View File

@ -8,7 +8,6 @@ use crate::private::size_hint;
// Not public API. Use serde-value instead.
//
// Obsoleted by format-specific buffer types (https://github.com/serde-rs/serde/pull/2912).
#[derive(Clone)]
#[doc(hidden)]
pub enum Content<'de> {
Bool(bool),