public void AddFields(IOpenApiObjectToTypeService openApiObjectToTypeService, IObjectsProcessingKeyStore keyStore, TypeBuilder typeBuilder, IEnumerable <IOpenApiType> extendedTypes, IDictionary <string, IOpenApiType> definitions) { foreach (var openApiType in extendedTypes) { Type donorType = typeof(object); donorType = _typeResolver.GetType(openApiObjectToTypeService, keyStore, openApiType, definitions, $"PropertyHolder_{Guid.NewGuid()}"); if (donorType == typeof(object)) { throw new NotSupportedException($"Type in All Of property for {typeBuilder.Name} not recognised"); } foreach (var field in donorType.GetFields(BindingFlags.Public | BindingFlags.Instance)) { typeBuilder.DefineField(field.Name, field.FieldType, FieldAttributes.Public); } } }
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 OpenApiEndpointToEndpointService(IOpenApiUmbrellaTypeResolver openApiUmbrellaTypeResolver, IOpenApiPrimitiveToTypeService openApiPrimitiveToTypeService, IOpenApiObjectToTypeService openApiObjectToTypeService) { _typeResolver = openApiUmbrellaTypeResolver; _primitiveService = openApiPrimitiveToTypeService; _objectToTypeService = openApiObjectToTypeService; }
public OpenApiSpecModelToGeneratedTypesService(IOpenApiObjectToTypeService openApiObjectToTypeService, IOpenApiUmbrellaTypeResolver openApiUmbrellaTypeResolver, IOpenApiEndpointToEndpointService openApiEndpointToEndpointService) { _objectGenerationService = openApiObjectToTypeService; _typeResolver = openApiUmbrellaTypeResolver; _endpointService = openApiEndpointToEndpointService; }
public Type GetType(IOpenApiObjectToTypeService objectService, IObjectsProcessingKeyStore objectKeyStore, IOpenApiType openApiType, IDictionary <string, IOpenApiType> definitions, string suggestedObjectName = null) { if (openApiType is OpenApiPrimitiveType) { return(_primitiveService.GetType((OpenApiPrimitiveType)openApiType, nameIfEnum: suggestedObjectName)); } if (openApiType.Matches <OpenApiReferencedType>()) { return(_referenceService.GetType(objectService, typeResolver: this, objectKeyStore, (OpenApiReferencedType)openApiType, definitions)); } if (openApiType.Matches <OpenApiObjectType>()) { return(objectService.GetType((OpenApiObjectType)openApiType, definitions, suggestedObjectName, objectKeyStore)); } if (openApiType.Matches <OpenApiArrayType>()) { var memberType = ((OpenApiArrayType)openApiType).Items; var arrayMemberType = GetType(objectService, objectKeyStore, memberType, definitions, suggestedObjectName + "Member"); return(typeof(IEnumerable <>).MakeGenericType(arrayMemberType)); } throw new NotSupportedException($"Unable to convert unsupported " + $"OpenApi Type {openApiType.GetType()}"); }