Skip to content

Commit 7368c1f

Browse files
authored
stop clone-ing serializers (#1402)
1 parent fd81a75 commit 7368c1f

32 files changed

+62
-52
lines changed

src/serializers/computed_fields.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::tools::SchemaDict;
1414
use super::errors::py_err_se_err;
1515
use super::Extra;
1616

17-
#[derive(Debug, Clone)]
17+
#[derive(Debug)]
1818
pub(super) struct ComputedFields(Vec<ComputedField>);
1919

2020
impl ComputedFields {
@@ -109,7 +109,7 @@ impl ComputedFields {
109109
}
110110
}
111111

112-
#[derive(Debug, Clone)]
112+
#[derive(Debug)]
113113
struct ComputedField {
114114
property_name: String,
115115
property_name_py: Py<PyString>,

src/serializers/fields.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use super::shared::PydanticSerializer;
2020
use super::shared::{CombinedSerializer, TypeSerializer};
2121

2222
/// representation of a field for serialization
23-
#[derive(Debug, Clone)]
23+
#[derive(Debug)]
2424
pub(super) struct SerField {
2525
pub key_py: Py<PyString>,
2626
pub alias: Option<String>,
@@ -93,7 +93,7 @@ pub(super) enum FieldsMode {
9393
}
9494

9595
/// General purpose serializer for fields - used by dataclasses, models and typed_dicts
96-
#[derive(Debug, Clone)]
96+
#[derive(Debug)]
9797
pub struct GeneralFieldsSerializer {
9898
fields: AHashMap<String, SerField>,
9999
computed_fields: Option<ComputedFields>,

src/serializers/infer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ pub(crate) fn infer_to_python_known(
266266
ObType::Generator => {
267267
let iter = super::type_serializers::generator::SerializationIterator::new(
268268
value.downcast()?,
269-
super::type_serializers::any::AnySerializer.into(),
269+
super::type_serializers::any::AnySerializer::get(),
270270
SchemaFilter::default(),
271271
include,
272272
exclude,

src/serializers/shared.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ macro_rules! combined_serializer {
4040
find_only: {$($builder:path;)*}
4141
both: {$($b_key:ident: $b_serializer:path;)*}
4242
) => {
43-
#[derive(Debug, Clone)]
43+
#[derive(Debug)]
4444
#[enum_dispatch]
4545
pub enum CombinedSerializer {
4646
$($e_key($e_serializer),)*
@@ -256,7 +256,7 @@ impl PyGcTraverse for CombinedSerializer {
256256
}
257257

258258
#[enum_dispatch(CombinedSerializer)]
259-
pub(crate) trait TypeSerializer: Send + Sync + Clone + Debug {
259+
pub(crate) trait TypeSerializer: Send + Sync + Debug {
260260
fn to_python(
261261
&self,
262262
value: &Bound<'_, PyAny>,

src/serializers/type_serializers/any.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use std::borrow::Cow;
1+
use std::{
2+
borrow::Cow,
3+
sync::{Arc, OnceLock},
4+
};
25

36
use pyo3::prelude::*;
47
use pyo3::types::PyDict;
@@ -14,6 +17,13 @@ use super::{
1417
#[derive(Debug, Clone, Default)]
1518
pub struct AnySerializer;
1619

20+
impl AnySerializer {
21+
pub fn get() -> &'static Arc<CombinedSerializer> {
22+
static ANY_SERIALIZER: OnceLock<Arc<CombinedSerializer>> = OnceLock::new();
23+
ANY_SERIALIZER.get_or_init(|| Arc::new(Self.into()))
24+
}
25+
}
26+
1727
impl BuildSerializer for AnySerializer {
1828
const EXPECTED_TYPE: &'static str = "any";
1929

src/serializers/type_serializers/bytes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use super::{
1111
TypeSerializer,
1212
};
1313

14-
#[derive(Debug, Clone)]
14+
#[derive(Debug)]
1515
pub struct BytesSerializer {
1616
bytes_mode: BytesMode,
1717
}

src/serializers/type_serializers/dataclass.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ impl BuildSerializer for DataclassArgsBuilder {
6161
}
6262
}
6363

64-
#[derive(Debug, Clone)]
64+
#[derive(Debug)]
6565
pub struct DataclassSerializer {
6666
class: Py<PyType>,
6767
serializer: Box<CombinedSerializer>,

src/serializers/type_serializers/datetime_etc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ fn downcast_date_reject_datetime<'a, 'py>(py_date: &'a Bound<'py, PyAny>) -> PyR
3838

3939
macro_rules! build_serializer {
4040
($struct_name:ident, $expected_type:literal, $downcast:path, $convert_func:ident $(, $json_check_func:ident)?) => {
41-
#[derive(Debug, Clone)]
41+
#[derive(Debug)]
4242
pub struct $struct_name;
4343

4444
impl BuildSerializer for $struct_name {

src/serializers/type_serializers/decimal.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use super::{
1111
infer_json_key, infer_serialize, infer_to_python, BuildSerializer, CombinedSerializer, Extra, TypeSerializer,
1212
};
1313

14-
#[derive(Debug, Clone)]
14+
#[derive(Debug)]
1515
pub struct DecimalSerializer {}
1616

1717
impl BuildSerializer for DecimalSerializer {

src/serializers/type_serializers/definitions.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::tools::SchemaDict;
1212

1313
use super::{py_err_se_err, BuildSerializer, CombinedSerializer, Extra, TypeSerializer};
1414

15-
#[derive(Debug, Clone)]
15+
#[derive(Debug)]
1616
pub struct DefinitionsSerializerBuilder;
1717

1818
impl BuildSerializer for DefinitionsSerializerBuilder {

0 commit comments

Comments
 (0)