async-graphql 3.0.21

A GraphQL server library implemented in Rust
Documentation
Define a directive for query.

*[See also the Book](https://async-graphql.github.io/async-graphql/en/custom_directive.html).*

# Macro attributes

| Attribute     | description               | Type     | Optional |
|---------------|---------------------------|----------|----------|
| name          | Object name               | string   | Y        |
| visible       | If `false`, it will not be displayed in introspection. *[See also the Book]https://async-graphql.github.io/async-graphql/en/visibility.html.* | bool | Y |
| visible       | Call the specified function. If the return value is `false`, it will not be displayed in introspection. | string | Y |
| repeatable    | It means that the directive can be used multiple times in the same location.         | bool        | Y        |
| rename_args   | Rename all the arguments according to the given case convention. The possible values are "lowercase", "UPPERCASE", "PascalCase", "camelCase", "snake_case", "SCREAMING_SNAKE_CASE".| string   | Y        |
| locations     | Specify the location where the directive is available, multiples are allowed. The possible values is "field", ... | string | N |

# Directive attributes

| Attribute    | description                              | Type        | Optional |
|--------------|------------------------------------------|------------ |----------|
| name         | Argument name                            | string      | Y        |
| desc         | Argument description                     | string      | Y        |
| default      | Use `Default::default` for default value | none        | Y        |
| default      | Argument default value                   | literal     | Y        |
| default_with | Expression to generate default value     | code string | Y        |
| validator    | Input value validator *[See also the Book]https://async-graphql.github.io/async-graphql/en/input_value_validators.html*                   | object | Y        |
| visible      | If `false`, it will not be displayed in introspection. *[See also the Book]https://async-graphql.github.io/async-graphql/en/visibility.html.* | bool | Y |
| visible      | Call the specified function. If the return value is `false`, it will not be displayed in introspection. | string | Y |
| secret       | Mark this field as a secret, it will not output the actual value in the log. | bool | Y |

# Examples

```rust
use async_graphql::*;

struct ConcatDirective {
    value: String,
}

#[async_trait::async_trait]
impl CustomDirective for ConcatDirective {
    async fn resolve_field(&self, _ctx: &Context<'_>, resolve: ResolveFut<'_>) -> ServerResult<Option<Value>> {
        resolve.await.map(|value| {
            value.map(|value| match value {
                Value::String(str) => Value::String(str + &self.value),
                _ => value,
            })
        })
    }
}

#[Directive(location = "field")]
fn concat(value: String) -> impl CustomDirective {
    ConcatDirective { value }
}

struct Query;

#[Object]
impl Query {
    async fn value(&self) -> &'static str {
        "abc"
    }
}

# tokio::runtime::Runtime::new().unwrap().block_on(async move {
let schema = Schema::build(Query, EmptyMutation, EmptySubscription)
    .directive(concat)
    .finish();
let res = schema.execute(r#"{ value @concat(value: "def") }"#).await.into_result().unwrap().data;
assert_eq!(res, value!({
    "value": "abcdef",
}));
# });
```