Skip to content

Commit 69bd18d

Browse files
committed
Support directive in complex object
1 parent a244af4 commit 69bd18d

File tree

4 files changed

+9
-2
lines changed

4 files changed

+9
-2
lines changed

derive/src/args.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,8 @@ pub struct ComplexObjectField {
972972
#[darling(multiple)]
973973
pub derived: Vec<DerivedField>,
974974
pub flatten: bool,
975+
#[darling(default, multiple, rename = "directive")]
976+
pub directives: Vec<Expr>,
975977
}
976978

977979
#[derive(FromMeta, Default)]

derive/src/complex_object.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,10 @@ pub fn generate(
174174
let field_deprecation = gen_deprecation(&method_args.deprecation, &crate_name);
175175
let external = method_args.external;
176176
let shareable = method_args.shareable;
177+
let directives = gen_directive_calls(
178+
&method_args.directives,
179+
TypeDirectiveLocation::FieldDefinition,
180+
);
177181
let override_from = match &method_args.override_from {
178182
Some(from) => {
179183
quote! { ::std::option::Option::Some(::std::string::ToString::to_string(#from)) }
@@ -391,7 +395,7 @@ pub fn generate(
391395
override_from: #override_from,
392396
visible: #visible,
393397
compute_complexity: #complexity,
394-
directive_invocations: ::std::vec![],
398+
directive_invocations: ::std::vec![ #(#directives),* ],
395399
}));
396400
});
397401

tests/schemas/test_fed2_compose_2.schema.graphql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type Query {
1515

1616
type TestComplexObject @type_directive_object(description: "This is OBJECT in (Complex / Simple)Object") {
1717
field: String! @type_directive_field_definition(description: "This is FIELD_DEFINITION in (Complex / Simple)Object")
18-
test(arg1: String! @type_directive_argument_definition(description: "This is ARGUMENT_DEFINITION in ComplexObject.arg1"), arg2: String! @type_directive_argument_definition(description: "This is ARGUMENT_DEFINITION in ComplexObject.arg2")): String!
18+
test(arg1: String! @type_directive_argument_definition(description: "This is ARGUMENT_DEFINITION in ComplexObject.arg1"), arg2: String! @type_directive_argument_definition(description: "This is ARGUMENT_DEFINITION in ComplexObject.arg2")): String! @type_directive_field_definition(description: "This is FIELD_DEFINITION in ComplexObject")
1919
}
2020

2121
enum TestEnum @type_directive_enum(description: "This is ENUM in Enum") {

tests/type_directive.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ fn test_type_directive_2() {
140140

141141
#[ComplexObject]
142142
impl TestComplexObject {
143+
#[graphql(directive = type_directive_field_definition::apply("This is FIELD_DEFINITION in ComplexObject".to_string()))]
143144
async fn test(
144145
&self,
145146
#[graphql(directive = type_directive_argument_definition::apply("This is ARGUMENT_DEFINITION in ComplexObject.arg1".to_string()))]

0 commit comments

Comments
 (0)