public SwaggerProperty Create(IPropertyDetails propertyDetails, Queue <Type> typeQueue)
        {
            if (propertyDetails == null)
            {
                throw new ArgumentNullException(nameof(propertyDetails));
            }

            var swaggerType = _swaggerTypeConverter.GetSwaggerType(propertyDetails.PropertyType);

            switch (swaggerType)
            {
            case SwaggerType.Object:
                typeQueue.Enqueue(propertyDetails.PropertyType);
                return(new ReferencedSwaggerProperty
                {
                    Name = propertyDetails.Name,
                    Reference = _definitionNameProvider.GetDefinitionName(propertyDetails.PropertyType)
                });

            case SwaggerType.Array:
                var propertyType = _swaggerTypeConverter.GetTypeToDocument(propertyDetails.PropertyType);

                typeQueue?.Enqueue(propertyType);

                return(new ArraySwaggerProperty
                {
                    Name = propertyDetails.Name,
                    Reference = _definitionNameProvider.GetDefinitionName(propertyType)
                });
            }

            return(new TypedSwaggerProperty {
                Name = propertyDetails.Name, Type = swaggerType
            });
        }
        public SwaggerSchema Create(Type type, IEnumerable <IPropertyDetails> propertyDetails, Queue <Type> typeQueue)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            var schema = new SwaggerSchema
            {
                Title = type.Name,
                Type  = _swaggerTypeConverter.GetSwaggerType(type)
                        // TODO: Required
            };

            if (schema.Type == SwaggerType.Object && propertyDetails != null)
            {
                schema.Properties =
                    new SwaggerObjectCollectionFacade <SwaggerProperty>(
                        propertyDetails.Select(p => _propertyFactory.Create(p, typeQueue)));
            }

            return(schema);
        }