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.
Getting Started
Step 1: Add the ServiceModelSwiftCodeGenerate dependency
ServiceModelSwiftCodeGenerate uses the Swift Package Manager. To use the framework, add the following dependency
to your Package.swift-
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.
By default, the code generator will use \(applicationDescription.baseName)Model for the name of the model target and
\(applicationDescription.baseName)Client for the name of the client target. You can override these defaults by using
the ModelAndClientTargetSupport type.
Further, if you are generating additional targets, you can use a custom type that provides the name of
additional targets. This type will have to conform to the ModelTargetSupport and ClientTargetSupport protocols.
extension ServiceModelCodeGenerator where TargetSupportType: ModelTargetSupport & ClientTargetSupport & MyCustomTargetSupport {
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
// The `targetSupport` attribute will conform to the `MyCustomTargetSupport` protocol.
}
}
public protocol MyCustomTargetSupport {
var myCustomTargetName: String { get }
}
public struct MyTargetSupport: ModelTargetSupport, ClientTargetSupport, MyCustomTargetSupport {
public let modelTargetName: String
public let clientTargetName: String
public let myCustomTargetName: String
public init(modelTargetName: String, clientTargetName: String,
myCustomTargetName: String) {
self.modelTargetName = modelTargetName
self.clientTargetName = clientTargetName
self.myCustomTargetName = myCustomTargetName
}
}
public struct MyCodeGeneration {
public static func generateFromModel<ModelType: ServiceModel>(
modelFilePath: String,
modelType: ModelType.Type,
modelTargetName: String, clientTargetName: String,
myCustomTargetName: String,
customizations: CodeGenerationCustomizations,
applicationDescription: ApplicationDescription,
modelOverride: ModelOverride?,
...) throws
-> ModelType {
let targetSupport = MyTargetSupport(modelTargetName: modelTargetName,
clientTargetName: clientTargetName,
myCustomTargetName: myCustomTargetName)
return try ServiceModelGenerate.generateFromModel(
modelFilePath: modelFilePath,
customizations: customizations,
applicationDescription: applicationDescription,
targetSupport: targetSupport,
modelOverride: modelOverride) { (codeGenerator, serviceModel) in
try codeGenerator.generateFromModel(serviceModel: serviceModel, ...)
}
}
}
Further Concepts
The ServiceModel Protocol
The ServiceModel protocol represents the parsed service model and provides access to descriptions of
the operations, fields and errors.
The ModelClientDelegate protocol
The ModelClientDelegate protocol provides customization points for the creation of service clients.
The ModelErrorsDelegate protocol
The ModelErrorsDelegate protocol provides customization points for handling errors returned from an application endpoint conforming to the service model.
The ModelOverride type
The ModelOverride type provides the opportunity to override values from the service model.
License
This library is licensed under the Apache 2.0 License.
ServiceModelSwiftCodeGenerate
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.
Getting Started
Step 1: Add the ServiceModelSwiftCodeGenerate dependency
ServiceModelSwiftCodeGenerate uses the Swift Package Manager. To use the framework, add the following dependency to your Package.swift-
Step 2: Use the library to generate code
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 aServiceModelCodeGenerator
to the provided function which can call any required generation functions.By default, the code generator will use
\(applicationDescription.baseName)Model
for the name of the model target and\(applicationDescription.baseName)Client
for the name of the client target. You can override these defaults by using theModelAndClientTargetSupport
type.Further, if you are generating additional targets, you can use a custom type that provides the name of additional targets. This type will have to conform to the
ModelTargetSupport
andClientTargetSupport
protocols.Further Concepts
The ServiceModel Protocol
The
ServiceModel
protocol represents the parsed service model and provides access to descriptions of the operations, fields and errors.The ModelClientDelegate protocol
The
ModelClientDelegate
protocol provides customization points for the creation of service clients.The ModelErrorsDelegate protocol
The
ModelErrorsDelegate
protocol provides customization points for handling errors returned from an application endpoint conforming to the service model.The ModelOverride type
The
ModelOverride
type provides the opportunity to override values from the service model.License
This library is licensed under the Apache 2.0 License.