public static void ResolveSchemas(OpenApiComponents components, Dictionary <string, OpenApiSchema> schemas) { var visitor = new FindSchemaReferences(); visitor.Schemas = schemas; var walker = new OpenApiWalker(visitor); walker.Walk(components); }
public static bool IsSharedContract(this OpenApiSchema schema, OpenApiComponents openApiComponents) { if (schema == null) { throw new ArgumentNullException(nameof(schema)); } if (openApiComponents == null) { throw new ArgumentNullException(nameof(openApiComponents)); } var referencedSchemaSet = new List <Tuple <string, string> >(); foreach (var itemSchema in openApiComponents.Schemas.Values) { foreach (var itemPropertySchema in itemSchema.Properties.Values) { if (itemPropertySchema.Reference == null) { continue; } var schemaReference = itemPropertySchema.Reference.Id; if (!string.Equals(schema.Title, schemaReference, StringComparison.Ordinal) || itemPropertySchema.IsSchemaEnum()) { continue; } if (!referencedSchemaSet.Any(x => string.Equals(x.Item1, itemSchema.Title, StringComparison.Ordinal) && string.Equals(x.Item2, schemaReference, StringComparison.Ordinal))) { referencedSchemaSet.Add(Tuple.Create(itemSchema.Title, schemaReference)); } if (referencedSchemaSet.Any(x => !string.Equals(x.Item1, itemSchema.Title, StringComparison.Ordinal) && string.Equals(x.Item2, schemaReference, StringComparison.Ordinal))) { return(true); } } } return(false); }