protected Array? ReadArray()

in src/Azure.IIoT.OpcUa/src/Encoders/BaseAvroDecoder.cs [1126:1205]


        protected Array? ReadArray(string? fieldName, BuiltInType builtInType,
            Type? systemType = null, ExpandedNodeId? encodeableTypeId = null)
        {
            switch (builtInType)
            {
                case BuiltInType.Boolean:
                    return ReadBooleanArray(fieldName)?.ToArray();
                case BuiltInType.SByte:
                    return ReadSByteArray(fieldName)?.ToArray();
                case BuiltInType.Byte:
                    return ReadByteArray(fieldName)?.ToArray();
                case BuiltInType.Int16:
                    return ReadInt16Array(fieldName)?.ToArray();
                case BuiltInType.UInt16:
                    return ReadUInt16Array(fieldName)?.ToArray();
                case BuiltInType.Enumeration:
                    if (systemType != null && encodeableTypeId != null)
                    {
                        DetermineIEncodeableSystemType(ref systemType, encodeableTypeId);
                        if (systemType?.IsEnum == true)
                        {
                            return ReadEnumeratedArray(fieldName, systemType);
                        }
                    }
                    return ReadEnumeratedArray(fieldName);
                case BuiltInType.Int32:
                    return ReadInt32Array(fieldName)?.ToArray();
                case BuiltInType.UInt32:
                    return ReadUInt32Array(fieldName)?.ToArray();
                case BuiltInType.Int64:
                    return ReadInt64Array(fieldName)?.ToArray();
                case BuiltInType.UInt64:
                    return ReadUInt64Array(fieldName)?.ToArray();
                case BuiltInType.Float:
                    return ReadFloatArray(fieldName)?.ToArray();
                case BuiltInType.Double:
                    return ReadDoubleArray(fieldName)?.ToArray();
                case BuiltInType.String:
                    return ReadStringArray(fieldName)?.ToArray();
                case BuiltInType.DateTime:
                    return ReadDateTimeArray(fieldName)?.ToArray();
                case BuiltInType.Guid:
                    return ReadGuidArray(fieldName)?.ToArray();
                case BuiltInType.ByteString:
                    return ReadByteStringArray(fieldName)?.ToArray();
                case BuiltInType.XmlElement:
                    return ReadXmlElementArray(fieldName)?.ToArray();
                case BuiltInType.NodeId:
                    return ReadNodeIdArray(fieldName)?.ToArray();
                case BuiltInType.ExpandedNodeId:
                    return ReadExpandedNodeIdArray(fieldName)?.ToArray();
                case BuiltInType.StatusCode:
                    return ReadStatusCodeArray(fieldName)?.ToArray();
                case BuiltInType.QualifiedName:
                    return ReadQualifiedNameArray(fieldName)?.ToArray();
                case BuiltInType.LocalizedText:
                    return ReadLocalizedTextArray(fieldName)?.ToArray();
                case BuiltInType.DataValue:
                    return ReadDataValueArray(fieldName)?.ToArray();
                case BuiltInType.Variant:
                    if (systemType != null && encodeableTypeId != null
                        && DetermineIEncodeableSystemType(ref systemType, encodeableTypeId))
                    {
                        return ReadEncodeableArray(fieldName, systemType, encodeableTypeId);
                    }
                    return ReadVariantArray(fieldName)?.ToArray();
                case BuiltInType.ExtensionObject:
                    return ReadExtensionObjectArray(fieldName)?.ToArray();
                case BuiltInType.DiagnosticInfo:
                    return ReadDiagnosticInfoArray(fieldName)?.ToArray();
                default:
                    if (systemType != null && encodeableTypeId != null
                        && DetermineIEncodeableSystemType(ref systemType, encodeableTypeId))
                    {
                        return ReadEncodeableArray(fieldName, systemType, encodeableTypeId);
                    }
                    throw new DecodingException(
                        $"Cannot decode unknown type in Array object with BuiltInType: {builtInType}.");
            }
        }