public Type GetType(IOpenApiObjectToTypeService objectService, IOpenApiUmbrellaTypeResolver typeResolver, IObjectsProcessingKeyStore objectKeyStore, OpenApiReferencedType referencedType, IDictionary <string, IOpenApiType> definitions) { var typeName = _lastTokenService.GetLastToken(referencedType.Type); if (!CurrentTypeHolder.Types.TryGetValue(typeName, out var existingType)) { if (!definitions.TryGetValue(typeName, out var definedNotCreated)) { throw new NotSupportedException($"Referenced type {typeName} is not defined in OpenApi document"); } //handle circular reference objectKeyStore.ThrowIfPresent(typeName); var createdType = typeResolver.GetType(objectService, objectKeyStore, definedNotCreated, definitions, typeName); CurrentTypeHolder.Types[typeName] = createdType; return(createdType); } return(existingType); }
public Type GetType(OpenApiObjectType inputObject, IDictionary <string, IOpenApiType> definitions, string name, IObjectsProcessingKeyStore objectsKeyStore) { objectsKeyStore.ThrowIfPresent(name); var typeBuilder = _module.Builder.DefineType(name, TypeAttributes.Public); objectsKeyStore.AddPresent(name); foreach (var property in inputObject.Properties) { var propName = property.Key; var propType = _typeResolver.GetType(this, objectsKeyStore, property.Value, definitions, $"{name}_{propName}"); DefinePublicField(typeBuilder, propType, propName); } if (inputObject.AllOf != null && inputObject.AllOf.Any()) { _fieldStealer.AddFields(this, objectsKeyStore, typeBuilder, inputObject.AllOf, definitions); } objectsKeyStore.RemovePresent(name); return(typeBuilder.CreateTypeInfo()); }