graphql-composition 0.12.2

An implementation of GraphQL federated schema composition
Documentation
use super::*;

macro_rules! make_ids {
    ($($($path:ident).* [ $id_type_name:ident ] -> $out:ident, )*) => {
        $(
        #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
        pub(crate) struct $id_type_name(usize);

        impl From<usize> for $id_type_name {
            fn from(value: usize) -> Self {
                $id_type_name(value)
            }
        }

        impl From<$id_type_name> for usize {
            fn from(value: $id_type_name) -> Self {
                value.0
            }
        }

        impl std::ops::Index<$id_type_name> for Subgraphs {
            type Output = $out;

            fn index(&self, index: $id_type_name) -> &$out {
                &self$(.$path)*[index.0]
            }
        }

        impl std::ops::IndexMut<$id_type_name> for Subgraphs {
            fn index_mut(&mut self, index: $id_type_name) -> &mut $out {
                &mut self$(.$path)*[index.0]
            }
        }
        )*
    };
}

make_ids! {
    fields.arguments[ArgumentId] -> ArgumentRecord,
    definitions.definitions[DefinitionId] -> Definition,
    directives.directive_definitions[DirectiveDefinitionId] -> DirectiveDefinition,
    directives.extra_directives[DirectiveId] -> ExtraDirectiveRecord,
    enums.values[EnumValueId] -> EnumValue,
    extensions[ExtensionId] -> ExtensionRecord,
    fields.fields[FieldId] -> FieldTuple,
    keys.keys[KeyId] -> Key,
    linked_schemas.definitions[LinkedDefinitionId] -> LinkedDefinitionRecord,
    linked_schemas.schemas[LinkedSchemaId] -> LinkedSchemaRecord,
    subgraphs[SubgraphId] -> Subgraph,
}