hive-router 0.3.6

GraphQL router for Federation, part of the Hive platform
use graphql_tools::parser::schema::{Directive, Value};

use super::directives::FederationDirective;

#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct ContextDirective {
    pub name: String,
}

impl ContextDirective {
    pub const NAME: &str = "context";
    pub const FROM_CONTEXT_NAME: &str = "context__fromContext";
}

impl FederationDirective for ContextDirective {
    fn directive_name() -> &'static str {
        Self::NAME
    }

    fn parse(directive: &Directive<'_, String>) -> Self {
        let mut result = Self::default();

        for (arg_name, arg_value) in &directive.arguments {
            if arg_name == "name" {
                if let Value::String(value) = arg_value {
                    result.name = value.clone();
                }
            }
        }

        result
    }
}