ServiceModelSwiftCodeGenerate is a foundational code generation library that can be used to generate code based on different service models. This library can be integrated into higher level code generation applications and provides some standard generation functions that can be called.
ServiceModelSwiftCodeGenerate uses the Swift Package Manager. To use the framework, add the following dependency to your Package.swift-
dependencies: [
.package(url: "https://github.com/amzn/service-model-swift-code-generate.git", .upToNextMajor(from: "0.1.0"))
]
The easiest way to integrate ServiceModelSwiftCodeGenerate into a higher level code generation application is to use
ServiceModelGenerate.generateFromModel
. This function takes a file path to a xml, json or yaml encoded service model,
will attempt to parse that file into the required service model type and will then pass that model and a ServiceModelCodeGenerator
to the provided function which can call any required generation functions.
extension ServiceModelCodeGenerator {
func generateFromModel<ModelType: ServiceModel>(serviceModel: ModelType,
...) throws {
let myClientDelegate = ...
let myModelErrorsDelegate = ...
generateClient(delegate: myClientDelegate)
generateModelOperationsEnum()
generateOperationsReporting()
generateModelOperationClientInput()
generateModelOperationClientOutput()
generateModelOperationHTTPInput()
generateModelOperationHTTPOutput()
generateModelStructures()
generateModelTypes()
generateModelErrors(delegate: myModelErrorsDelegate)
generateDefaultInstances(generationType: .internalTypes)
// Call any custom generation functions as required
}
}
public struct MyCodeGeneration {
static let asyncResultType = AsyncResultType(typeName: "HTTPResult",
libraryImport: "SmokeHTTPClient")
public static func generateFromModel<ModelType: ServiceModel>(
modelFilePath: String,
modelType: ModelType.Type,
customizations: CodeGenerationCustomizations,
applicationDescription: ApplicationDescription,
modelOverride: ModelOverride?,
...) throws {
func generatorFunction(codeGenerator: ServiceModelCodeGenerator,
serviceModel: ModelType) throws {
try codeGenerator.generateFromModel(serviceModel: serviceModel, ...)
}
try ServiceModelGenerate.generateFromModel(
modelFilePath: modelFilePath,
customizations: customizations,
applicationDescription: applicationDescription,
modelOverride: modelOverride,
generatorFunction: generatorFunction)
}
}
The ServiceModel
protocol represents the parsed service model and provides access to descriptions of
the operations, fields and errors. This library provides SwaggerServiceModel
that conforms to this protocol
and will parse a Swagger 2.0 specification file.
The ModelClientDelegate
protocol provides customization points for the creation of service clients.
The ModelErrorsDelegate
protocol provides customization points for handling errors returned from an application endpoint conforming to the service model.
The ModelOverride
type provides the opportunity to override values from the service model.
This library is licensed under the Apache 2.0 License.