reactive_graph_graphql_schema/directives/
concat_directive.rs

1use async_graphql::Context;
2use async_graphql::CustomDirective;
3use async_graphql::Directive;
4use async_graphql::ResolveFut;
5use async_graphql::ServerResult;
6use async_graphql::Value;
7use async_trait::async_trait;
8
9struct ConcatDirective {
10    value: String,
11}
12
13#[async_trait]
14impl CustomDirective for ConcatDirective {
15    async fn resolve_field(&self, _ctx: &Context<'_>, resolve: ResolveFut<'_>) -> ServerResult<Option<Value>> {
16        resolve.await.map(|value| {
17            value.map(|value| match value {
18                Value::String(str) => Value::String(str + &self.value),
19                _ => value,
20            })
21        })
22    }
23}
24
25#[Directive(location = "Field")]
26pub fn concat(value: String) -> impl CustomDirective {
27    ConcatDirective { value }
28}