bluejay_validator/definition/
rules.rs1mod enum_value_definition_uniqueness;
2mod input_field_definition_uniqueness;
3mod input_object_circular_references;
4
5pub use enum_value_definition_uniqueness::EnumValueDefinitionUniqueness;
6pub use input_field_definition_uniqueness::InputFieldDefinitionUniqueness;
7pub use input_object_circular_references::InputObjectCircularReferences;
8
9#[macro_export]
10macro_rules! combine_definition_rules {
11 ( $name:ty, $err:ty, [$( $rule:ty ),* $(,)?] $(,)? ) => {
12 paste::paste! {
13 pub struct $name<'a, S: bluejay_core::definition::SchemaDefinition> {
14 $([<$rule:snake>]: $rule<'a, S>,)*
15 }
16
17 impl<'a, S: bluejay_core::definition::SchemaDefinition + 'a> $crate::definition::Rule<'a, S> for $name<'a, S> {
18 type Error = $err<'a, S>;
19
20 fn new(schema_definition: &'a S) -> Self {
21 Self {
22 $([<$rule:snake>]: $rule::new(schema_definition),)*
23 }
24 }
25 }
26
27 impl<'a, S: bluejay_core::definition::SchemaDefinition + 'a> IntoIterator for $name<'a, S> {
28 type Item = $err<'a, S>;
29 type IntoIter = $crate::chain_types!($(std::iter::Map<<$rule<'a, S> as IntoIterator>::IntoIter, fn(<$rule<'a, S> as $crate::definition::Rule<'a, S>>::Error) -> $err<'a, S>>),*);
30
31 fn into_iter(self) -> Self::IntoIter {
32 $crate::chain_iters!($(self.[<$rule:snake>].into_iter().map(Into::into as fn(<$rule<'a, S> as $crate::definition::Rule<'a, S>>::Error) -> $err<'a, S>)),*)
33 }
34 }
35
36 impl<'a, S: bluejay_core::definition::SchemaDefinition> $crate::definition::Visitor<'a, S> for $name<'a, S> {
37 fn visit_input_object_type_definition(&mut self, input_object_type_definition: &'a S::InputObjectTypeDefinition) {
38 $(self.[<$rule:snake>].visit_input_object_type_definition(input_object_type_definition);)*
39 }
40
41 fn visit_enum_type_definition(&mut self, enum_type_definition: &'a S::EnumTypeDefinition) {
42 $(self.[<$rule:snake>].visit_enum_type_definition(enum_type_definition);)*
43 }
44 }
45 }
46 };
47}
48
49combine_definition_rules!(
50 BuiltinRules,
51 crate::definition::Error,
52 [
53 EnumValueDefinitionUniqueness,
54 InputFieldDefinitionUniqueness,
55 InputObjectCircularReferences,
56 ],
57);