in codegen/src/Azure.Iot.Operations.ProtocolCompiler/EnvoyGenerator/EnvoyTransformFactory.cs [102:196]
private static IEnumerable<ITemplateTransform> GetTelemetryTransforms(string language, string projectName, CodeName genNamespace, string modelId, CodeName serviceName, string genFormat, JsonElement telemElt, List<TelemetryEnvoyInfo> telemEnvoyInfos, string? workingPath, bool generateClient, bool generateServer, bool useSharedSubscription)
{
string serializerSubNamespace = formatSerializers[genFormat].SubNamespace;
string serializerClassName = formatSerializers[genFormat].ClassName;
EmptyTypeName serializerEmptyType = formatSerializers[genFormat].EmptyType;
CodeName telemetryName = new CodeName(telemElt.TryGetProperty(AnnexFileProperties.TelemName, out JsonElement nameElt) ? nameElt.GetString() ?? string.Empty : string.Empty);
string schemaRep = telemElt.GetProperty(AnnexFileProperties.TelemSchema).GetString()!;
ITypeName schemaType = schemaRep switch
{
RawTypeName.Designator => RawTypeName.Instance,
CustomTypeName.Designator => CustomTypeName.Instance,
_ => new CodeName(schemaRep),
};
switch (language)
{
case "csharp":
if (generateServer)
{
yield return new DotNetTelemetrySender(telemetryName, projectName, genNamespace, modelId, serviceName, serializerSubNamespace, serializerClassName, serializerEmptyType, schemaType);
}
if (generateClient)
{
yield return new DotNetTelemetryReceiver(telemetryName, projectName, genNamespace, modelId, serviceName, serializerSubNamespace, serializerClassName, serializerEmptyType, schemaType);
}
if (genFormat == PayloadFormat.Avro && schemaType is CodeName dotnetSchema)
{
yield return new DotNetSerialization(projectName, genNamespace, dotnetSchema, workingPath);
}
break;
case "go":
if (generateServer)
{
yield return new GoTelemetrySender(telemetryName, genNamespace, serializerSubNamespace, schemaType);
}
if (generateClient)
{
yield return new GoTelemetryReceiver(telemetryName, genNamespace, serializerSubNamespace, schemaType);
}
break;
case "java":
if (generateServer)
{
yield return new JavaTelemetrySender(telemetryName.AsGiven, genNamespace, serializerSubNamespace, serializerClassName, schemaType.GetTypeName(TargetLanguage.Java));
}
if (generateClient)
{
yield return new JavaTelemetryReceiver(telemetryName.AsGiven, genNamespace, serializerSubNamespace, serializerClassName, schemaType.GetTypeName(TargetLanguage.Java));
}
break;
case "python":
if (generateServer)
{
yield return new PythonTelemetrySender(telemetryName.AsGiven, genNamespace, serializerSubNamespace, serializerClassName, schemaType.GetTypeName(TargetLanguage.Python));
}
if (generateClient)
{
yield return new PythonTelemetryReceiver(telemetryName.AsGiven, genNamespace, serializerSubNamespace, serializerClassName, schemaType.GetTypeName(TargetLanguage.Python));
}
break;
case "rust":
if (generateServer)
{
yield return new RustTelemetrySender(telemetryName, genNamespace, schemaType);
}
if (generateClient)
{
yield return new RustTelemetryReceiver(telemetryName, genNamespace, schemaType, useSharedSubscription);
}
if (schemaType is CodeName rustSchema)
{
yield return new RustSerialization(genNamespace, genFormat, rustSchema, workingPath);
}
break;
case "c":
break;
default:
throw GetLanguageNotRecognizedException(language);
}
telemEnvoyInfos.Add(new TelemetryEnvoyInfo(telemetryName, schemaType));
}