public void CollateSchemaTypes()

in codegen/src/Azure.Iot.Operations.ProtocolCompiler/TypeGenerator/JsonSchemaStandardizer.cs [52:98]


        public void CollateSchemaTypes(JsonElement rootElt, JsonElement schemaElt, string? internalDefsKey, string schemaFilePath, CodeName genNamespace, List<SchemaType> schemaTypes)
        {
            string? title = schemaElt.GetProperty("title").GetString();
            if (string.IsNullOrEmpty(title))
            {
                throw new InvalidOperationException($"The 'title' property is missing or empty in the schema at {schemaFilePath}.");
            }
            CodeName schemaName = new CodeName((char.IsNumber(title[0]) ? "_" : "") + Regex.Replace(title, "[^a-zA-Z0-9]+", "_", RegexOptions.CultureInvariant));

            string? description = schemaElt.TryGetProperty("description", out JsonElement descElt) ? descElt.GetString() : null;

            if (schemaElt.TryGetProperty("properties", out JsonElement propertiesElt) && schemaElt.GetProperty("type").GetString() == "object")
            {
                HashSet<string> requiredFields = schemaElt.TryGetProperty("required", out JsonElement requiredElt) ? requiredElt.EnumerateArray().Select(e => e.GetString()!).ToHashSet() : new HashSet<string>();
                schemaTypes.Add(new ObjectType(
                    schemaName,
                    genNamespace,
                    description,
                    propertiesElt.EnumerateObject().ToDictionary(p => new CodeName(p.Name), p => GetObjectTypeFieldInfo(rootElt, p.Name, p.Value, internalDefsKey, requiredFields, schemaFilePath, genNamespace))));
            }
            else if (schemaElt.TryGetProperty("enum", out JsonElement enumElt))
            {
                switch (schemaElt.GetProperty("type").GetString())
                {
                    case "integer":
                        schemaTypes.Add(new EnumType(
                            schemaName,
                            genNamespace,
                            description,
                            names: schemaElt.GetProperty("x-enumNames").EnumerateArray().Select(e => new CodeName(e.GetString()!)).ToArray(),
                            intValues: enumElt.EnumerateArray().Select(e => e.GetInt32()).ToArray()));
                        break;
                    case "string":
                        string[] stringValues = enumElt.EnumerateArray().Select(e => e.GetString()!).ToArray();
                        CodeName[] enumNames = schemaElt.TryGetProperty("x-enumNames", out JsonElement enumNameElt) ?
                            enumNameElt.EnumerateArray().Select(e => new CodeName(e.GetString()!)).ToArray() :
                            stringValues.Select(v => new CodeName(v)).ToArray();
                        schemaTypes.Add(new EnumType(
                            schemaName,
                            genNamespace,
                            description,
                            names: enumNames,
                            stringValues: stringValues));
                        break;
                }
            }
        }