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