use async_graphql::async_trait::async_trait;
use async_graphql::{Context, CustomDirective, Directive, ResolveFut, ServerResult, Value};
use super::MatcherError;
#[Directive(location = "Field", name = "shouldBeDefined")]
pub fn should_be_defined() -> impl CustomDirective {
ShouldBeDefined
}
struct ShouldBeDefined;
#[async_trait]
impl CustomDirective for ShouldBeDefined {
async fn resolve_field(
&self,
ctx: &Context<'_>,
resolve: ResolveFut<'_>,
) -> ServerResult<Option<Value>> {
match resolve.await {
Ok(None) => Err(MatcherError::new(
ctx.item.pos,
"Received: undefined".to_string(),
)),
Ok(Some(other)) => Ok(Some(other)),
Err(err) => Err(MatcherError::unexpected_error(err)),
}
}
}