graphql-composition 0.12.2

An implementation of GraphQL federated schema composition
Documentation
use super::{EntityDefinitionId, EnumDefinitionId, InputObjectId, InterfaceId, ObjectId, ScalarDefinitionId, UnionId};
use wrapping::Wrapping;

#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Debug)]
pub(crate) struct Type {
    pub wrapping: Wrapping,
    pub definition: Definition,
}

#[derive(Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord, Debug)]
pub(crate) enum Definition {
    Scalar(ScalarDefinitionId),
    Object(ObjectId),
    Interface(InterfaceId),
    Union(UnionId),
    Enum(EnumDefinitionId),
    InputObject(InputObjectId),
}

impl Definition {
    pub fn as_enum(&self) -> Option<EnumDefinitionId> {
        if let Self::Enum(v) = self { Some(*v) } else { None }
    }

    pub fn as_entity(&self) -> Option<EntityDefinitionId> {
        match self {
            Self::Object(id) => Some(EntityDefinitionId::Object(*id)),
            Self::Interface(id) => Some(EntityDefinitionId::Interface(*id)),
            _ => None,
        }
    }
}