public GenSdk( IApiDescriptionGroupCollectionProvider apiDescriptionsProvider, IOptions <MvcJsonOptions> mvcJsonOpts, ILogger <GenSdk> logger) { _logger = logger; _apiDescriptionsProvider = apiDescriptionsProvider; _jsonSerializerSettings = mvcJsonOpts.Value.SerializerSettings; _tsGen = new TypescriptGenerator(mvcJsonOpts.Value?.SerializerSettings?.ContractResolver ?? new DefaultContractResolver()); }
private static string getApiErrors(GenSdkOptions opts, TypescriptGenerator tsGen) { IEnumerable <Type> apiErrors = typeof(ApiError).GetTypeInfo().Assembly .GetTypes() .Where(t => typeof(ApiError).IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract) .Select(t => t); var errorDefinitions = new List <ErrorDefinition>(); foreach (var t in apiErrors) { var bt = t.GetTypeInfo().BaseType; if (bt == typeof(ApiError)) { errorDefinitions.Add(new ErrorDefinition() { Error = t.Name, DataType = null }); continue; } else if (bt.IsConstructedGenericType && bt.GetTypeInfo().GetGenericTypeDefinition() == typeof(ApiError <>)) { var dataType = bt.GenericTypeArguments[0]; tsGen.Generate(dataType); errorDefinitions.Add(new ErrorDefinition() { Error = t.Name, DataType = dataType }); continue; } } var errs = new List <string>(); foreach (var def in errorDefinitions) { errs.Add(opts.GetApiPromiseErrorFormat(def.Error, def.DataType != null ? tsGen.Generate(def.DataType) : "null")); } return(opts.GetApiPromiseFormat(apiErrors: indentAllButFirstLine(string.Join("\r\n", errs)))); }