internal SwaggerApiActionResponse(SwaggerBase root)
        {
#if DEBUG
#endif

            _root = root ?? throw new ArgumentNullException(nameof(root));
        }
        public override Task <ApiActionResponse> ExecuteAsync(CancellationToken cancellationToken)
        {
            var version = Data.Version ?? _defaultVersion;

            var versionMatchedApiActions = _registrationProvider.Get(version);

            var root = new SwaggerBase
            {
                Info = new SwaggerInfo
                {
                    Title          = _options.Title ?? _hostName + " API",
                    Description    = _options.Description,
                    TermsOfService = _options.TermsOfService,

                    Contact = new SwaggerContact
                    {
                        Name  = _options.ContactName,
                        Email = _options.ContactEmail,
                        Url   = _options.ContactUrl
                    },

                    License = new SwaggerLicense
                    {
                        Name = _options.LicenseName,
                        Url  = _options.LicenseUrl
                    },

                    Version = version.ToString()
                },

                BasePath = _options.ApiRoutePrefix,

                Paths = new SwaggerObjectCollectionFacade <SwaggerPath>(_pathFactory.GetPaths(versionMatchedApiActions)),

                Consumes    = _abstractModelApplicators.SelectMany(a => a.ContentTypes ?? new string[0]).ToArray(),
                Produces    = _edgeSerializers.SelectMany(a => a.ContentTypes ?? new string[0]).ToArray(),
                Definitions =
                    new SwaggerObjectCollectionFacade <SwaggerDefinition>(
                        _swaggerDefinitionsFactory.Create(versionMatchedApiActions))
            };

            if (_options.ExternalDocumentationDescription != null || _options.ExternalDocumentationUrl != null)
            {
                root.ExternalDocs = new SwaggerExternalDocumentation
                {
                    Description = _options.ExternalDocumentationDescription,
                    Url         = _options.ExternalDocumentationUrl
                };
            }

            return(Task.FromResult <ApiActionResponse>(new SwaggerApiActionResponse(root)));
        }
        public static Dictionary <string, string> Implementation(this SwaggerBase item)
        {
            var implementation = item.Extensions.GetValue <object>("x-ms-implementation");

            if (implementation != null)
            {
                if (implementation is string implAgnostic)
                {
                    var res = new Dictionary <string, string>();
                    res[""] = implAgnostic;
                    return(res);
                }
                else if (implementation is JObject impl)
                {
                    return(impl.ToObject <Dictionary <string, string> >());
                }
            }
            return(null);
        }
 public static string ForwardTo(this SwaggerBase item) => item.Extensions.GetValue <string>("x-ms-forward-to");
 public static bool IsTaggedAsNoWire(this SwaggerBase item) => item.Extensions.Get <bool>("x-ms-no-wire") == true;