Skip to content

Commit 58da950

Browse files
committed
use a Definitions type for documentation / discoverability
1 parent 6f28ae5 commit 58da950

40 files changed

+111
-107
lines changed

src/definitions.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ use ahash::AHashMap;
1212
use crate::build_tools::py_err;
1313

1414
// An integer id for the reference
15-
type ReferenceId = usize;
15+
pub type ReferenceId = usize;
16+
17+
/// Definitions for validators or serializers
18+
/// They get indexed by a ReferenceId,
19+
/// which are handed out and managed by DefinitionsBuilder
20+
pub type Definitions<T> = [T];
1621

1722
#[derive(Clone, Debug)]
1823
struct Definition<T> {

src/serializers/extra.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use super::config::SerializationConfig;
1212
use super::errors::{PydanticSerializationUnexpectedValue, UNEXPECTED_TYPE_SER_MARKER};
1313
use super::ob_type::ObTypeLookup;
1414
use super::shared::CombinedSerializer;
15+
use crate::definitions::Definitions;
1516

1617
/// this is ugly, would be much better if extra could be stored in `SerializationState`
1718
/// then `SerializationState` got a `serialize_infer` method, but I couldn't get it to work
@@ -71,7 +72,7 @@ impl SerializationState {
7172
#[cfg_attr(debug_assertions, derive(Debug))]
7273
pub(crate) struct Extra<'a> {
7374
pub mode: &'a SerMode,
74-
pub definitions: &'a [CombinedSerializer],
75+
pub definitions: &'a Definitions<CombinedSerializer>,
7576
pub ob_type_lookup: &'a ObTypeLookup,
7677
pub warnings: &'a CollectWarnings,
7778
pub by_alias: bool,
@@ -97,7 +98,7 @@ impl<'a> Extra<'a> {
9798
pub fn new(
9899
py: Python<'a>,
99100
mode: &'a SerMode,
100-
definitions: &'a [CombinedSerializer],
101+
definitions: &'a Definitions<CombinedSerializer>,
101102
by_alias: bool,
102103
warnings: &'a CollectWarnings,
103104
exclude_unset: bool,

src/validators/any.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::errors::ValResult;
55
use crate::input::Input;
66
use crate::recursion_guard::RecursionGuard;
77

8-
use super::{BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
8+
use super::{BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
99

1010
/// This might seem useless, but it's useful in DictValidator to avoid Option<Validator> a lot
1111
#[derive(Debug, Clone)]
@@ -29,7 +29,7 @@ impl Validator for AnyValidator {
2929
py: Python<'data>,
3030
input: &'data impl Input<'data>,
3131
_extra: &Extra,
32-
_definitions: &'data [CombinedValidator],
32+
_definitions: &'data Definitions<CombinedValidator>,
3333
_recursion_guard: &'s mut RecursionGuard,
3434
) -> ValResult<'data, PyObject> {
3535
// Ok(input.clone().into_py(py))

src/validators/arguments.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::input::{GenericArguments, Input};
1010
use crate::lookup_key::LookupKey;
1111
use crate::recursion_guard::RecursionGuard;
1212

13-
use super::{build_validator, BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
13+
use super::{build_validator, BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1414

1515
#[derive(Debug, Clone)]
1616
struct Parameter {
@@ -155,7 +155,7 @@ impl Validator for ArgumentsValidator {
155155
py: Python<'data>,
156156
input: &'data impl Input<'data>,
157157
extra: &Extra,
158-
definitions: &'data [CombinedValidator],
158+
definitions: &'data Definitions<CombinedValidator>,
159159
recursion_guard: &'s mut RecursionGuard,
160160
) -> ValResult<'data, PyObject> {
161161
let args = input.validate_args()?;

src/validators/bool.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::errors::ValResult;
66
use crate::input::Input;
77
use crate::recursion_guard::RecursionGuard;
88

9-
use super::{BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
9+
use super::{BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1010

1111
#[derive(Debug, Clone)]
1212
pub struct BoolValidator {
@@ -34,7 +34,7 @@ impl Validator for BoolValidator {
3434
py: Python<'data>,
3535
input: &'data impl Input<'data>,
3636
extra: &Extra,
37-
_definitions: &'data [CombinedValidator],
37+
_definitions: &'data Definitions<CombinedValidator>,
3838
_recursion_guard: &'s mut RecursionGuard,
3939
) -> ValResult<'data, PyObject> {
4040
// TODO in theory this could be quicker if we used PyBool rather than going to a bool

src/validators/bytes.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::errors::{ErrorType, ValError, ValResult};
77
use crate::input::Input;
88
use crate::recursion_guard::RecursionGuard;
99

10-
use super::{BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
10+
use super::{BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1111

1212
#[derive(Debug, Clone)]
1313
pub struct BytesValidator {
@@ -42,7 +42,7 @@ impl Validator for BytesValidator {
4242
py: Python<'data>,
4343
input: &'data impl Input<'data>,
4444
extra: &Extra,
45-
_definitions: &'data [CombinedValidator],
45+
_definitions: &'data Definitions<CombinedValidator>,
4646
_recursion_guard: &'s mut RecursionGuard,
4747
) -> ValResult<'data, PyObject> {
4848
let either_bytes = input.validate_bytes(extra.strict.unwrap_or(self.strict))?;
@@ -79,7 +79,7 @@ impl Validator for BytesConstrainedValidator {
7979
py: Python<'data>,
8080
input: &'data impl Input<'data>,
8181
extra: &Extra,
82-
_definitions: &'data [CombinedValidator],
82+
_definitions: &'data Definitions<CombinedValidator>,
8383
_recursion_guard: &'s mut RecursionGuard,
8484
) -> ValResult<'data, PyObject> {
8585
let either_bytes = input.validate_bytes(extra.strict.unwrap_or(self.strict))?;

src/validators/call.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::errors::ValResult;
88
use crate::input::Input;
99
use crate::recursion_guard::RecursionGuard;
1010

11-
use super::{build_validator, BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
11+
use super::{build_validator, BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1212

1313
#[derive(Debug, Clone)]
1414
pub struct CallValidator {
@@ -71,7 +71,7 @@ impl Validator for CallValidator {
7171
py: Python<'data>,
7272
input: &'data impl Input<'data>,
7373
extra: &Extra,
74-
definitions: &'data [CombinedValidator],
74+
definitions: &'data Definitions<CombinedValidator>,
7575
recursion_guard: &'s mut RecursionGuard,
7676
) -> ValResult<'data, PyObject> {
7777
let args = self

src/validators/callable.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::errors::{ErrorType, ValError, ValResult};
55
use crate::input::Input;
66
use crate::recursion_guard::RecursionGuard;
77

8-
use super::{BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
8+
use super::{BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
99

1010
#[derive(Debug, Clone)]
1111
pub struct CallableValidator;
@@ -28,7 +28,7 @@ impl Validator for CallableValidator {
2828
py: Python<'data>,
2929
input: &'data impl Input<'data>,
3030
_extra: &Extra,
31-
_definitions: &'data [CombinedValidator],
31+
_definitions: &'data Definitions<CombinedValidator>,
3232
_recursion_guard: &'s mut RecursionGuard,
3333
) -> ValResult<'data, PyObject> {
3434
match input.callable() {

src/validators/chain.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::errors::ValResult;
77
use crate::input::Input;
88
use crate::recursion_guard::RecursionGuard;
99

10-
use super::{build_validator, BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
10+
use super::{build_validator, BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1111

1212
#[derive(Debug, Clone)]
1313
pub struct ChainValidator {
@@ -72,7 +72,7 @@ impl Validator for ChainValidator {
7272
py: Python<'data>,
7373
input: &'data impl Input<'data>,
7474
extra: &Extra,
75-
definitions: &'data [CombinedValidator],
75+
definitions: &'data Definitions<CombinedValidator>,
7676
recursion_guard: &'s mut RecursionGuard,
7777
) -> ValResult<'data, PyObject> {
7878
let mut steps_iter = self.steps.iter();

src/validators/custom_error.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::errors::{ErrorType, PydanticCustomError, PydanticKnownError, ValError
77
use crate::input::Input;
88
use crate::recursion_guard::RecursionGuard;
99

10-
use super::{build_validator, BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
10+
use super::{build_validator, BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1111

1212
#[derive(Debug, Clone)]
1313
pub enum CustomError {
@@ -88,7 +88,7 @@ impl Validator for CustomErrorValidator {
8888
py: Python<'data>,
8989
input: &'data impl Input<'data>,
9090
extra: &Extra,
91-
definitions: &'data [CombinedValidator],
91+
definitions: &'data Definitions<CombinedValidator>,
9292
recursion_guard: &'s mut RecursionGuard,
9393
) -> ValResult<'data, PyObject> {
9494
self.validator

src/validators/dataclass.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::validators::function::convert_err;
1414

1515
use super::arguments::{json_get, json_slice, py_get, py_slice};
1616
use super::model::{create_class, force_setattr, Revalidate};
17-
use super::{build_validator, BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
17+
use super::{build_validator, BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1818

1919
#[derive(Debug, Clone)]
2020
struct Field {
@@ -127,7 +127,7 @@ impl Validator for DataclassArgsValidator {
127127
py: Python<'data>,
128128
input: &'data impl Input<'data>,
129129
extra: &Extra,
130-
definitions: &'data [CombinedValidator],
130+
definitions: &'data Definitions<CombinedValidator>,
131131
recursion_guard: &'s mut RecursionGuard,
132132
) -> ValResult<'data, PyObject> {
133133
let args = input.validate_dataclass_args(&self.dataclass_name)?;
@@ -316,7 +316,7 @@ impl Validator for DataclassArgsValidator {
316316
field_name: &'data str,
317317
field_value: &'data PyAny,
318318
extra: &Extra,
319-
definitions: &'data [CombinedValidator],
319+
definitions: &'data Definitions<CombinedValidator>,
320320
recursion_guard: &'s mut RecursionGuard,
321321
) -> ValResult<'data, PyObject> {
322322
let dict: &PyDict = obj.downcast()?;
@@ -461,7 +461,7 @@ impl Validator for DataclassValidator {
461461
py: Python<'data>,
462462
input: &'data impl Input<'data>,
463463
extra: &Extra,
464-
definitions: &'data [CombinedValidator],
464+
definitions: &'data Definitions<CombinedValidator>,
465465
recursion_guard: &'s mut RecursionGuard,
466466
) -> ValResult<'data, PyObject> {
467467
if let Some(self_instance) = extra.self_instance {
@@ -507,7 +507,7 @@ impl Validator for DataclassValidator {
507507
field_name: &'data str,
508508
field_value: &'data PyAny,
509509
extra: &Extra,
510-
definitions: &'data [CombinedValidator],
510+
definitions: &'data Definitions<CombinedValidator>,
511511
recursion_guard: &'s mut RecursionGuard,
512512
) -> ValResult<'data, PyObject> {
513513
if self.frozen {
@@ -567,7 +567,7 @@ impl DataclassValidator {
567567
self_instance: &'s PyAny,
568568
input: &'data impl Input<'data>,
569569
extra: &Extra,
570-
definitions: &'data [CombinedValidator],
570+
definitions: &'data Definitions<CombinedValidator>,
571571
recursion_guard: &'s mut RecursionGuard,
572572
) -> ValResult<'data, PyObject> {
573573
// we need to set `self_instance` to None for nested validators as we don't want to operate on the self_instance

src/validators/date.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::input::{EitherDate, Input};
1010
use crate::recursion_guard::RecursionGuard;
1111
use crate::validators::datetime::{NowConstraint, NowOp};
1212

13-
use super::{BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
13+
use super::{BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1414

1515
#[derive(Debug, Clone)]
1616
pub struct DateValidator {
@@ -40,7 +40,7 @@ impl Validator for DateValidator {
4040
py: Python<'data>,
4141
input: &'data impl Input<'data>,
4242
extra: &Extra,
43-
_definitions: &'data [CombinedValidator],
43+
_definitions: &'data Definitions<CombinedValidator>,
4444
_recursion_guard: &'s mut RecursionGuard,
4545
) -> ValResult<'data, PyObject> {
4646
let date = match input.validate_date(extra.strict.unwrap_or(self.strict)) {

src/validators/datetime.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::errors::{py_err_string, ErrorType, ValError, ValResult};
1111
use crate::input::{EitherDateTime, Input};
1212
use crate::recursion_guard::RecursionGuard;
1313

14-
use super::{BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
14+
use super::{BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1515

1616
#[derive(Debug, Clone)]
1717
pub struct DateTimeValidator {
@@ -41,7 +41,7 @@ impl Validator for DateTimeValidator {
4141
py: Python<'data>,
4242
input: &'data impl Input<'data>,
4343
extra: &Extra,
44-
_definitions: &'data [CombinedValidator],
44+
_definitions: &'data Definitions<CombinedValidator>,
4545
_recursion_guard: &'s mut RecursionGuard,
4646
) -> ValResult<'data, PyObject> {
4747
let datetime = input.validate_datetime(extra.strict.unwrap_or(self.strict))?;

src/validators/definitions.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ use pyo3::prelude::*;
33
use pyo3::types::{PyDict, PyList};
44

55
use crate::build_tools::SchemaDict;
6-
use crate::definitions::DefinitionsBuilder;
76
use crate::errors::{ErrorType, ValError, ValResult};
87
use crate::input::Input;
98
use crate::recursion_guard::RecursionGuard;
109

11-
use super::{build_validator, BuildValidator, CombinedValidator, Extra, Validator};
10+
use super::{build_validator, BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1211

1312
#[derive(Debug, Clone)]
1413
pub struct DefinitionsValidatorBuilder;
@@ -77,7 +76,7 @@ impl Validator for DefinitionRefValidator {
7776
py: Python<'data>,
7877
input: &'data impl Input<'data>,
7978
extra: &Extra,
80-
definitions: &'data [CombinedValidator],
79+
definitions: &'data Definitions<CombinedValidator>,
8180
recursion_guard: &'s mut RecursionGuard,
8281
) -> ValResult<'data, PyObject> {
8382
if let Some(id) = input.identity() {
@@ -105,7 +104,7 @@ impl Validator for DefinitionRefValidator {
105104
field_name: &'data str,
106105
field_value: &'data PyAny,
107106
extra: &Extra,
108-
definitions: &'data [CombinedValidator],
107+
definitions: &'data Definitions<CombinedValidator>,
109108
recursion_guard: &'s mut RecursionGuard,
110109
) -> ValResult<'data, PyObject> {
111110
if let Some(id) = obj.identity() {
@@ -184,7 +183,7 @@ fn validate<'s, 'data>(
184183
py: Python<'data>,
185184
input: &'data impl Input<'data>,
186185
extra: &Extra,
187-
definitions: &'data [CombinedValidator],
186+
definitions: &'data Definitions<CombinedValidator>,
188187
recursion_guard: &'s mut RecursionGuard,
189188
) -> ValResult<'data, PyObject> {
190189
let validator = definitions.get(validator_id).unwrap();
@@ -199,7 +198,7 @@ fn validate_assignment<'data>(
199198
field_name: &'data str,
200199
field_value: &'data PyAny,
201200
extra: &Extra,
202-
definitions: &'data [CombinedValidator],
201+
definitions: &'data Definitions<CombinedValidator>,
203202
recursion_guard: &mut RecursionGuard,
204203
) -> ValResult<'data, PyObject> {
205204
let validator = definitions.get(validator_id).unwrap();

src/validators/dict.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::recursion_guard::RecursionGuard;
1111

1212
use super::any::AnyValidator;
1313
use super::list::length_check;
14-
use super::{build_validator, BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
14+
use super::{build_validator, BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1515

1616
#[derive(Debug, Clone)]
1717
pub struct DictValidator {
@@ -64,7 +64,7 @@ impl Validator for DictValidator {
6464
py: Python<'data>,
6565
input: &'data impl Input<'data>,
6666
extra: &Extra,
67-
definitions: &'data [CombinedValidator],
67+
definitions: &'data Definitions<CombinedValidator>,
6868
recursion_guard: &'s mut RecursionGuard,
6969
) -> ValResult<'data, PyObject> {
7070
let dict = input.validate_dict(extra.strict.unwrap_or(self.strict))?;
@@ -113,7 +113,7 @@ macro_rules! build_validate {
113113
input: &'data impl Input<'data>,
114114
dict: &'data $dict_type,
115115
extra: &Extra,
116-
definitions: &'data [CombinedValidator],
116+
definitions: &'data Definitions<CombinedValidator>,
117117
recursion_guard: &'s mut RecursionGuard,
118118
) -> ValResult<'data, PyObject> {
119119
let output = PyDict::new(py);

src/validators/float.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::errors::{ErrorType, ValError, ValResult};
77
use crate::input::Input;
88
use crate::recursion_guard::RecursionGuard;
99

10-
use super::{BuildValidator, CombinedValidator, DefinitionsBuilder, Extra, Validator};
10+
use super::{BuildValidator, CombinedValidator, Definitions, DefinitionsBuilder, Extra, Validator};
1111

1212
pub struct FloatBuilder;
1313

@@ -65,7 +65,7 @@ impl Validator for FloatValidator {
6565
py: Python<'data>,
6666
input: &'data impl Input<'data>,
6767
extra: &Extra,
68-
_definitions: &'data [CombinedValidator],
68+
_definitions: &'data Definitions<CombinedValidator>,
6969
_recursion_guard: &'s mut RecursionGuard,
7070
) -> ValResult<'data, PyObject> {
7171
let float = input.validate_float(extra.strict.unwrap_or(self.strict), extra.ultra_strict)?;
@@ -109,7 +109,7 @@ impl Validator for ConstrainedFloatValidator {
109109
py: Python<'data>,
110110
input: &'data impl Input<'data>,
111111
extra: &Extra,
112-
_definitions: &'data [CombinedValidator],
112+
_definitions: &'data Definitions<CombinedValidator>,
113113
_recursion_guard: &'s mut RecursionGuard,
114114
) -> ValResult<'data, PyObject> {
115115
let float = input.validate_float(extra.strict.unwrap_or(self.strict), extra.ultra_strict)?;

0 commit comments

Comments
 (0)