private static IEnumerable GetTelemetryTransforms()

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));
        }