Skip to content

Commit 7f6d749

Browse files
committed
added ProvidedRequiredArguments
1 parent 4484496 commit 7f6d749

File tree

5 files changed

+450
-5
lines changed

5 files changed

+450
-5
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ cargo add graphql-tools
6464
- [x] KnownArgumentNames
6565
- [x] UniqueArgumentNames
6666
- [ ] ValuesOfCorrectType
67-
- [ ] ProvidedRequiredArguments
67+
- [x] ProvidedRequiredArguments
6868
- [ ] VariablesInAllowedPosition
6969
- [x] OverlappingFieldsCanBeMerged
7070
- [ ] UniqueInputFieldNames (blocked by https://github.com/graphql-rust/graphql-parser/issues/59)

src/ast/ext.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,29 @@
11
use std::collections::{HashMap, HashSet};
22

33
use crate::ast::QueryVisitor;
4-
use crate::static_graphql::query::{self, FragmentSpread, OperationDefinition};
4+
use crate::static_graphql::query::{self, FragmentSpread, OperationDefinition, Type};
55
use crate::static_graphql::schema::{
6-
self, Field, InterfaceType, ObjectType, TypeDefinition, UnionType,
6+
self, Field, InputValue, InterfaceType, ObjectType, TypeDefinition, UnionType,
77
};
88

99
use super::{get_named_type, TypeInfoElementRef, TypeInfoRegistry};
1010

11+
pub trait InputValueHelpers {
12+
fn is_required(&self) -> bool;
13+
}
14+
15+
impl InputValueHelpers for InputValue {
16+
fn is_required(&self) -> bool {
17+
if let Type::NonNullType(_inner_type) = &self.value_type {
18+
if let None = &self.default_value {
19+
return true;
20+
}
21+
}
22+
23+
false
24+
}
25+
}
26+
1127
pub trait AstWithVariables {
1228
fn get_variables(&self) -> Vec<query::VariableDefinition>;
1329
fn get_variables_in_use(

src/validation/rules/defaults.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use super::{
44
FieldsOnCorrectType, FragmentsOnCompositeTypes, KnownArgumentNames, KnownFragmentNames,
55
KnownTypeNames, LeafFieldSelections, LoneAnonymousOperation, NoFragmentsCycle,
66
NoUndefinedVariables, NoUnusedFragments, OverlappingFieldsCanBeMerged, PossibleFragmentSpreads,
7-
SingleFieldSubscriptions, UniqueArgumentNames, UniqueFragmentNames, UniqueOperationNames,
8-
VariablesAreInputTypes,
7+
ProvidedRequiredArguments, SingleFieldSubscriptions, UniqueArgumentNames, UniqueFragmentNames,
8+
UniqueOperationNames, VariablesAreInputTypes,
99
};
1010

1111
pub fn default_rules_validation_plan() -> ValidationPlan {
@@ -28,6 +28,7 @@ pub fn default_rules_validation_plan() -> ValidationPlan {
2828
plan.add_rule(Box::new(NoUndefinedVariables {}));
2929
plan.add_rule(Box::new(KnownArgumentNames {}));
3030
plan.add_rule(Box::new(UniqueArgumentNames {}));
31+
plan.add_rule(Box::new(ProvidedRequiredArguments {}));
3132

3233
plan
3334
}

src/validation/rules/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub mod no_undefined_variables;
1111
pub mod no_unused_fragments;
1212
pub mod overlapping_fields_can_be_merged;
1313
pub mod possible_fragment_spreads;
14+
pub mod provided_required_arguments;
1415
/// Utilities validating GraphQL documents/operations
1516
pub mod rule;
1617
pub mod single_field_subscriptions;
@@ -32,6 +33,7 @@ pub use self::no_undefined_variables::*;
3233
pub use self::no_unused_fragments::*;
3334
pub use self::overlapping_fields_can_be_merged::*;
3435
pub use self::possible_fragment_spreads::*;
36+
pub use self::provided_required_arguments::*;
3537
pub use self::rule::*;
3638
pub use self::single_field_subscriptions::*;
3739
pub use self::unique_argument_names::*;

0 commit comments

Comments
 (0)