// PUBLIC METHODS ///////////////////////////////////////////////////
        #region Assert Methods
        public static void Equal(IResourceIdentityInfo expected, IResourceIdentityInfo actual)
        {
            if (expected == null)
            {
                Assert.Null(actual);
                return;
            }
            Assert.NotNull(actual);

            Assert.Equal(expected.ApiType, actual.ApiType);
            PropertyInfoAssert.Equal(expected.Id, actual.Id);
        }
        // PUBLIC CONSTRUCTORS //////////////////////////////////////////////
        #region Constructors
        public ResourceType(Type clrResourceType,
                            IHypermediaInfo hypermediaInfo,
                            IResourceIdentityInfo resourceIdentityInfo,
                            IAttributesInfo attributesInfo,
                            IRelationshipsInfo relationshipsInfo,
                            ILinksInfo linksInfo,
                            IMetaInfo metaInfo)
            : base(clrResourceType, attributesInfo)
        {
            Contract.Requires(hypermediaInfo != null);
            Contract.Requires(resourceIdentityInfo != null);
            Contract.Requires(relationshipsInfo != null);
            Contract.Requires(linksInfo != null);

            // JSON Properties
            this.HypermediaInfo       = hypermediaInfo;
            this.ResourceIdentityInfo = resourceIdentityInfo;
            this.RelationshipsInfo    = relationshipsInfo;
            this.LinksInfo            = linksInfo;
            this.MetaInfo             = metaInfo;
        }
        // PUBLIC METHODS ///////////////////////////////////////////////////
        #region Extensions Methods
        public static bool IsSingleton(this IResourceIdentityInfo resourceIdentityInfo)
        {
            Contract.Requires(resourceIdentityInfo != null);

            return(resourceIdentityInfo.Id == null);
        }