in codegen/src/Azure.Iot.Operations.ProtocolCompiler/EnvoyGenerator/EnvoyTransformFactory.cs [23:100]
public static IEnumerable<ITemplateTransform> GetTransforms(string language, string projectName, JsonDocument annexDocument, string? workingPath, string? sdkPath, bool generateClient, bool generateServer, bool defaultImpl, string genRoot, CodeName? sharedPrefix, bool generateProject)
{
string modelId = annexDocument.RootElement.GetProperty(AnnexFileProperties.ModelId).GetString()!;
CodeName genNamespace = new CodeName(annexDocument.RootElement.GetProperty(AnnexFileProperties.Namespace).GetString()!);
CodeName? sharedNamespace = annexDocument.RootElement.TryGetProperty(AnnexFileProperties.Shared, out JsonElement sharedElt) ? new(sharedElt.GetString()!) : null;
CodeName serviceName = new CodeName(annexDocument.RootElement.GetProperty(AnnexFileProperties.ServiceName).GetString()!);
string genFormat = annexDocument.RootElement.GetProperty(AnnexFileProperties.PayloadFormat).GetString()!;
bool separateTelemetries = annexDocument.RootElement.GetProperty(AnnexFileProperties.TelemSeparate).GetBoolean();
string? telemetryTopic = annexDocument.RootElement.TryGetProperty(AnnexFileProperties.TelemetryTopic, out JsonElement telemTopicElt) ? telemTopicElt.GetString() : null;
string? commandTopic = annexDocument.RootElement.TryGetProperty(AnnexFileProperties.CommandRequestTopic, out JsonElement cmdTopicElt) ? cmdTopicElt.GetString() : null;
string? telemServiceGroupId = annexDocument.RootElement.TryGetProperty(AnnexFileProperties.TelemServiceGroupId, out JsonElement tGroupIdElt) ? tGroupIdElt.GetString() : null;
string? cmdServiceGroupId = annexDocument.RootElement.TryGetProperty(AnnexFileProperties.CmdServiceGroupId, out JsonElement cGroupIdElt) ? cGroupIdElt.GetString() : null;
string? version = modelId.IndexOf(";") > 0 ? modelId.Substring(modelId.IndexOf(";") + 1) : null;
string? normalizedVersionSuffix = version?.Replace(".", "_");
List<CommandEnvoyInfo> cmdEnvoyInfos = new();
List<TelemetryEnvoyInfo> telemEnvoyInfos = new();
if (annexDocument.RootElement.TryGetProperty(AnnexFileProperties.TelemetryList, out JsonElement telemsElt) && telemsElt.GetArrayLength() > 0)
{
if (telemetryTopic == null)
{
throw new Exception($"Model {modelId} has at least one Telemetry content but no {DtdlMqttExtensionValues.GetStandardTerm(DtdlMqttExtensionValues.TelemTopicPropertyFormat)} property");
}
foreach (JsonElement telemEl in telemsElt.EnumerateArray())
{
foreach (ITemplateTransform templateTransform in GetTelemetryTransforms(language, projectName, genNamespace, modelId, serviceName, genFormat, telemEl, telemEnvoyInfos, workingPath, generateClient, generateServer, useSharedSubscription: telemServiceGroupId != null))
{
yield return templateTransform;
}
}
}
if (annexDocument.RootElement.TryGetProperty(AnnexFileProperties.CommandList, out JsonElement cmdsElt) && cmdsElt.GetArrayLength() > 0)
{
if (commandTopic == null)
{
throw new Exception($"Model {modelId} has at least one Command content but no {DtdlMqttExtensionValues.GetStandardTerm(DtdlMqttExtensionValues.CmdReqTopicPropertyFormat)} property");
}
foreach (JsonElement cmdEl in cmdsElt.EnumerateArray())
{
foreach (ITemplateTransform templateTransform in GetCommandTransforms(language, projectName, genNamespace, modelId, serviceName, genFormat, commandTopic, cmdEl, cmdEnvoyInfos, normalizedVersionSuffix, workingPath, generateClient, generateServer, useSharedSubscription: cmdServiceGroupId != null))
{
yield return templateTransform;
}
}
}
if (annexDocument.RootElement.TryGetProperty(AnnexFileProperties.ErrorList, out JsonElement errsElt) && errsElt.GetArrayLength() > 0)
{
foreach (JsonElement errEl in errsElt.EnumerateArray())
{
foreach (ITemplateTransform templateTranform in GetErrorTransforms(language, projectName, genNamespace, errEl))
{
yield return templateTranform;
}
}
}
foreach (ITemplateTransform templateTransform in GetServiceTransforms(language, projectName, genNamespace, sharedNamespace, modelId, serviceName, genFormat, commandTopic, telemetryTopic, cmdServiceGroupId, telemServiceGroupId, cmdEnvoyInfos, telemEnvoyInfos, sharedPrefix, genRoot, generateClient, generateServer, defaultImpl, separateTelemetries))
{
yield return templateTransform;
}
foreach (ITemplateTransform templateTransform in GetResourceTransforms(language, projectName, genFormat))
{
yield return templateTransform;
}
foreach (ITemplateTransform templateTransform in GetProjectTransforms(language, projectName, genNamespace, genFormat, sdkPath, sharedPrefix, generateProject))
{
yield return templateTransform;
}
}