private void Convert(SwaggerParserContext context) { if (m_swaggerService.Swagger == null) { m_errors.Add(context.CreateError("swagger field is missing.")); } else if (m_swaggerService.Swagger != SwaggerUtility.SwaggerVersion) { m_errors.Add(context.CreateError($"swagger should be '{SwaggerUtility.SwaggerVersion}'.", "swagger")); } if (m_swaggerService.Info == null) { m_errors.Add(context.CreateError("info is missing.")); } var name = m_serviceName; if (name != null && !ServiceDefinitionUtility.IsValidName(name)) { m_errors.Add(context.CreateError("ServiceName generator option is not a valid service name.")); } if (name == null) { name = m_swaggerService.Info?.Identifier; } if (name != null && !ServiceDefinitionUtility.IsValidName(name)) { m_errors.Add(context.CreateError("info/x-identifier is not a valid service name.", "info/x-identifier")); } if (name == null && m_swaggerService.Info?.Title is string title) { name = CodeGenUtility.ToPascalCase(title); } if (name == null) { m_errors.Add(context.CreateError("info/title is missing.", "info")); } if (name != null && !ServiceDefinitionUtility.IsValidName(name)) { m_errors.Add(context.CreateError("info/title is not a valid service name.", "info/title")); } var attributes = new List <ServiceAttributeInfo>(); var version = m_swaggerService.Info?.Version; if (!string.IsNullOrWhiteSpace(version)) { attributes.Add(new ServiceAttributeInfo("info", new[] { new ServiceAttributeParameterInfo("version", version !, context.CreatePart("info/version") !) },
internal static void ResolveOperations(this SwaggerService swaggerService, ref SwaggerOperations swaggerOperations, ref SwaggerParserContext context) { if (swaggerOperations.Ref != null) { const string refPrefix = "#/paths/"; if (!swaggerOperations.Ref.StartsWith(refPrefix, StringComparison.Ordinal)) { throw new ServiceDefinitionException("Operations $ref must start with '#/paths/'.", context.CreatePosition()); } string name = UnescapeRefPart(swaggerOperations.Ref.Substring(refPrefix.Length)); if (!swaggerService.Paths.TryGetValue(name, out swaggerOperations)) { throw new ServiceDefinitionException($"Missing path named '{name}'.", context.CreatePosition()); } context = context.Root.CreateContext("paths/" + name); } }
public static SwaggerConversion Create(SwaggerService swaggerService, string?serviceName, SwaggerParserContext context) { var conversion = new SwaggerConversion(swaggerService, serviceName); conversion.Convert(context); return(conversion); }
/// <summary> /// Implements TryParseDefinition. /// </summary> protected override bool TryParseDefinitionCore(ServiceDefinitionText text, out ServiceInfo?service, out IReadOnlyList <ServiceDefinitionError> errors) { var isFsd = new FsdParser().TryParseDefinition(text, out service, out errors); if (isFsd || text.Name.EndsWith(".fsd", StringComparison.OrdinalIgnoreCase)) { return(isFsd); } service = null; if (string.IsNullOrWhiteSpace(text.Text)) { errors = new[] { new ServiceDefinitionError("Service definition is missing.", new ServiceDefinitionPosition(text.Name, 1, 1)) }; return(false); } SwaggerService swaggerService; SwaggerParserContext context; if (!s_detectJsonRegex.IsMatch(text.Text)) { // parse YAML var yamlDeserializer = new DeserializerBuilder() .IgnoreUnmatchedProperties() .WithNamingConvention(new OurNamingConvention()) .Build(); using (var stringReader = new StringReader(text.Text)) { try { swaggerService = yamlDeserializer.Deserialize <SwaggerService>(stringReader); } catch (YamlException exception) { var errorMessage = exception.InnerException?.Message ?? exception.Message; const string errorStart = "): "; var errorStartIndex = errorMessage.IndexOf(errorStart, StringComparison.OrdinalIgnoreCase); if (errorStartIndex != -1) { errorMessage = errorMessage.Substring(errorStartIndex + errorStart.Length); } errors = new[] { new ServiceDefinitionError(errorMessage, new ServiceDefinitionPosition(text.Name, exception.End.Line, exception.End.Column)) }; return(false); } } if (swaggerService == null) { errors = new[] { new ServiceDefinitionError("Service definition is missing.", new ServiceDefinitionPosition(text.Name, 1, 1)) }; return(false); } context = SwaggerParserContext.FromYaml(text); } else { // parse JSON using (var stringReader = new StringReader(text.Text)) using (var jsonTextReader = new JsonTextReader(stringReader)) { try { swaggerService = JsonSerializer.Create(SwaggerUtility.JsonSerializerSettings).Deserialize <SwaggerService>(jsonTextReader); } catch (JsonException exception) { errors = new[] { new ServiceDefinitionError(exception.Message, new ServiceDefinitionPosition(text.Name, jsonTextReader.LineNumber, jsonTextReader.LinePosition)) }; return(false); } context = SwaggerParserContext.FromJson(text); } } var conversion = SwaggerConversion.Create(swaggerService, ServiceName, context); service = conversion.Service; errors = conversion.Errors; return(errors.Count == 0); }