From d80acbb26301b23132531d34828e3f26c84cd6bb Mon Sep 17 00:00:00 2001 From: Lukas Kurz Date: Tue, 13 Aug 2024 15:05:16 +0200 Subject: [PATCH 1/5] json source generation --- .../Connection/DeviceInfo/DeviceInfoJsonContext.cs | 6 ++++++ .../Connection/DeviceInfo/DeviceInfoMessage.cs | 12 ++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs b/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs new file mode 100644 index 00000000..1127b319 --- /dev/null +++ b/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs @@ -0,0 +1,6 @@ +using System.Text.Json.Serialization; + +namespace ShortDev.Microsoft.ConnectedDevices.Messages.Connection.DeviceInfo; + +[JsonSerializable(typeof(CdpDeviceInfo), GenerationMode = JsonSourceGenerationMode.Serialization)] +internal sealed partial class DeviceInfoJsonContext : JsonSerializerContext; diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoMessage.cs b/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoMessage.cs index 5b56c0be..f7ba8d9e 100644 --- a/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoMessage.cs +++ b/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoMessage.cs @@ -11,7 +11,10 @@ namespace ShortDev.Microsoft.ConnectedDevices.Messages.Connection.DeviceInfo; public static DeviceInfoMessage Parse(ref TReader reader) where TReader : struct, IEndianReader, allows ref struct => new() { - DeviceInfo = JsonSerializer.Deserialize(reader.ReadStringWithLength()) ?? throw new CdpProtocolException("Invalid device info") + DeviceInfo = JsonSerializer.Deserialize( + reader.ReadStringWithLength(), + DeviceInfoJsonContext.Default.CdpDeviceInfo + ) ?? throw new CdpProtocolException("Invalid device info") }; /// @@ -21,6 +24,11 @@ public static DeviceInfoMessage Parse(ref TReader reader) where TReader public void Write(ref TWriter writer) where TWriter : struct, IEndianWriter, allows ref struct { - writer.WriteWithLength(JsonSerializer.Serialize(DeviceInfo)); + writer.WriteWithLength( + JsonSerializer.Serialize( + DeviceInfo, + DeviceInfoJsonContext.Default.CdpDeviceInfo + ) + ); } } From 2a892fb7aed108b959ee498ce17cbe2cfd932a4d Mon Sep 17 00:00:00 2001 From: Lukas Kurz Date: Thu, 14 May 2026 00:20:57 +0200 Subject: [PATCH 2/5] Pregenerate bond logic https://github.com/nearby-sharing/BondDump --- .../Serialization/Helper.cs | 1586 +++++++++++++++++ .../Serialization/MaxDepthChecker.cs | 49 + .../Serialization/ThrowExpression.cs | 39 + .../Serialization/ValueSet.cs | 7 +- ...ShortDev.Microsoft.ConnectedDevices.csproj | 2 +- 5 files changed, 1678 insertions(+), 5 deletions(-) create mode 100644 lib/ShortDev.Microsoft.ConnectedDevices/Serialization/Helper.cs create mode 100644 lib/ShortDev.Microsoft.ConnectedDevices/Serialization/MaxDepthChecker.cs create mode 100644 lib/ShortDev.Microsoft.ConnectedDevices/Serialization/ThrowExpression.cs diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/Helper.cs b/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/Helper.cs new file mode 100644 index 00000000..4b520003 --- /dev/null +++ b/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/Helper.cs @@ -0,0 +1,1586 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShortDev.Microsoft.ConnectedDevices.Serialization +{ + + + public class ValueSetHelper + { + + public static void Serialize(object obj, Bond.Protocols.CompactBinaryWriter writer) + { + ValueSet _a81d8cc4_ValueSet_obj; + _a81d8cc4_ValueSet_obj = ((ValueSet)(obj)); + writer.WriteStructBegin(null); + if ((_a81d8cc4_ValueSet_obj.Entries.Count != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_MAP, 1, null); + System.Collections.Generic.IEnumerator> _1c41c4fd_enumerator; + _1c41c4fd_enumerator = _a81d8cc4_ValueSet_obj.Entries.GetEnumerator(); + writer.WriteContainerBegin(_a81d8cc4_ValueSet_obj.Entries.Count, Bond.BondDataType.BT_WSTRING, Bond.BondDataType.BT_STRUCT); + for ( + ; ; + ) + { + if (_1c41c4fd_enumerator.MoveNext()) + { + writer.WriteWString(_1c41c4fd_enumerator.Current.Key); + object _be093af8_obj; + _be093af8_obj = ((object)(_1c41c4fd_enumerator.Current.Value)); + PropertyValue _278a22e4_PropertyValue_obj; + _278a22e4_PropertyValue_obj = ((PropertyValue)(_be093af8_obj)); + writer.WriteStructBegin(null); + writer.WriteFieldBegin(Bond.BondDataType.BT_INT32, 0, null); + writer.WriteInt32(((int)(_278a22e4_PropertyValue_obj.Type))); + writer.WriteFieldEnd(); + if ((_278a22e4_PropertyValue_obj.Int32Value != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_INT32, 103, null); + writer.WriteInt32(_278a22e4_PropertyValue_obj.Int32Value); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_INT32, 103, null); + } + if ((_278a22e4_PropertyValue_obj.UInt32Value != 0u)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_UINT32, 104, null); + writer.WriteUInt32(_278a22e4_PropertyValue_obj.UInt32Value); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_UINT32, 104, null); + } + if ((_278a22e4_PropertyValue_obj.UInt64Value != 0ul)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_UINT64, 106, null); + writer.WriteUInt64(_278a22e4_PropertyValue_obj.UInt64Value); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_UINT64, 106, null); + } + if ((_278a22e4_PropertyValue_obj.GuidArrayValue.Count != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_LIST, 114, null); + int _a0aa934b_index; + int _a0aa934b_count; + _a0aa934b_index = -1; + _a0aa934b_count = _278a22e4_PropertyValue_obj.GuidArrayValue.Count; + writer.WriteContainerBegin(_a0aa934b_count, Bond.BondDataType.BT_STRUCT); + for ( + ; ; + ) + { + if (((_a0aa934b_index + = (_a0aa934b_index + 1)) + < _a0aa934b_count)) + { + object _ec347e1c_obj; + _ec347e1c_obj = ((object)(_278a22e4_PropertyValue_obj.GuidArrayValue[_a0aa934b_index])); + UUID _3b39fc71_UUID_obj; + _3b39fc71_UUID_obj = ((UUID)(_ec347e1c_obj)); + writer.WriteStructBegin(null); + if ((_3b39fc71_UUID_obj.Data1 != 0u)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_UINT32, 0, null); + writer.WriteUInt32(_3b39fc71_UUID_obj.Data1); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_UINT32, 0, null); + } + if ((_3b39fc71_UUID_obj.Data2 != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_UINT16, 1, null); + writer.WriteUInt16(_3b39fc71_UUID_obj.Data2); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_UINT16, 1, null); + } + if ((_3b39fc71_UUID_obj.Data3 != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_UINT16, 2, null); + writer.WriteUInt16(_3b39fc71_UUID_obj.Data3); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_UINT16, 2, null); + } + if ((_3b39fc71_UUID_obj.Data4 != 0ul)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_UINT64, 3, null); + writer.WriteUInt64(_3b39fc71_UUID_obj.Data4); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_UINT64, 3, null); + } + writer.WriteStructEnd(); + } + else + { + break; + } + } + writer.WriteContainerEnd(); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_LIST, 114, null); + } + if ((_278a22e4_PropertyValue_obj.StringValue != "")) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_STRING, 119, null); + writer.WriteString(_278a22e4_PropertyValue_obj.StringValue); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_STRING, 119, null); + } + if ((_278a22e4_PropertyValue_obj.UInt8ArrayValue.Count != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_LIST, 200, null); + int _14d70d4f_index; + int _14d70d4f_count; + _14d70d4f_index = -1; + _14d70d4f_count = _278a22e4_PropertyValue_obj.UInt8ArrayValue.Count; + writer.WriteContainerBegin(_14d70d4f_count, Bond.BondDataType.BT_UINT8); + for ( + ; ; + ) + { + if (((_14d70d4f_index + = (_14d70d4f_index + 1)) + < _14d70d4f_count)) + { + writer.WriteUInt8(_278a22e4_PropertyValue_obj.UInt8ArrayValue[_14d70d4f_index]); + } + else + { + break; + } + } + writer.WriteContainerEnd(); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_LIST, 200, null); + } + if ((_278a22e4_PropertyValue_obj.UInt32ArrayValue.Count != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_LIST, 204, null); + int _0117c42f_index; + int _0117c42f_count; + _0117c42f_index = -1; + _0117c42f_count = _278a22e4_PropertyValue_obj.UInt32ArrayValue.Count; + writer.WriteContainerBegin(_0117c42f_count, Bond.BondDataType.BT_UINT32); + for ( + ; ; + ) + { + if (((_0117c42f_index + = (_0117c42f_index + 1)) + < _0117c42f_count)) + { + writer.WriteUInt32(_278a22e4_PropertyValue_obj.UInt32ArrayValue[_0117c42f_index]); + } + else + { + break; + } + } + writer.WriteContainerEnd(); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_LIST, 204, null); + } + if ((_278a22e4_PropertyValue_obj.UInt64ArrayValue.Count != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_LIST, 206, null); + int _ff128d9a_index; + int _ff128d9a_count; + _ff128d9a_index = -1; + _ff128d9a_count = _278a22e4_PropertyValue_obj.UInt64ArrayValue.Count; + writer.WriteContainerBegin(_ff128d9a_count, Bond.BondDataType.BT_UINT64); + for ( + ; ; + ) + { + if (((_ff128d9a_index + = (_ff128d9a_index + 1)) + < _ff128d9a_count)) + { + writer.WriteUInt64(_278a22e4_PropertyValue_obj.UInt64ArrayValue[_ff128d9a_index]); + } + else + { + break; + } + } + writer.WriteContainerEnd(); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_LIST, 206, null); + } + if ((_278a22e4_PropertyValue_obj.StringArrayValue.Count != 0)) + { + writer.WriteFieldBegin(Bond.BondDataType.BT_LIST, 219, null); + int _0d92c7eb_index; + int _0d92c7eb_count; + _0d92c7eb_index = -1; + _0d92c7eb_count = _278a22e4_PropertyValue_obj.StringArrayValue.Count; + writer.WriteContainerBegin(_0d92c7eb_count, Bond.BondDataType.BT_STRING); + for ( + ; ; + ) + { + if (((_0d92c7eb_index + = (_0d92c7eb_index + 1)) + < _0d92c7eb_count)) + { + writer.WriteString(_278a22e4_PropertyValue_obj.StringArrayValue[_0d92c7eb_index]); + } + else + { + break; + } + } + writer.WriteContainerEnd(); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_LIST, 219, null); + } + writer.WriteStructEnd(); + } + else + { + break; + } + } + writer.WriteContainerEnd(); + writer.WriteFieldEnd(); + } + else + { + writer.WriteFieldOmitted(Bond.BondDataType.BT_MAP, 1, null); + } + writer.WriteStructEnd(); + } + + public static object Deserialize(Bond.Protocols.CompactBinaryReader reader) + { + ValueSet _7aa17938_ValueSet_result; + _7aa17938_ValueSet_result = new ValueSet(); + int _4dde9690_depth; + _4dde9690_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_4dde9690_depth + 1)); + Bond.BondDataType _c7f2a99e_fieldType; + ushort _c7f2a99e_fieldId; + reader.ReadStructBegin(); + reader.ReadFieldBegin(out _c7f2a99e_fieldType, out _c7f2a99e_fieldId); + for ( + ; ; + ) + { + if ((((int)(_c7f2a99e_fieldType)) > 1)) + { + if ((_c7f2a99e_fieldId == 1)) + { + if ((_c7f2a99e_fieldType == Bond.BondDataType.BT_MAP)) + { + int _90463c3d_depth; + _90463c3d_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_90463c3d_depth + 1)); + int _fa06a779_count; + Bond.BondDataType _fa06a779_keyType; + Bond.BondDataType _fa06a779_valueType; + reader.ReadContainerBegin(out _fa06a779_count, out _fa06a779_keyType, out _fa06a779_valueType); + if ((_fa06a779_keyType == Bond.BondDataType.BT_WSTRING)) + { + if ((_fa06a779_valueType == Bond.BondDataType.BT_STRUCT)) + { + string _391bf79b_ValueSet_result_Entries_key; + PropertyValue _391bf79b_ValueSet_result_Entries_value; + for ( + ; ; + ) + { + if (((_fa06a779_count + = (_fa06a779_count - 1)) + >= 0)) + { + _391bf79b_ValueSet_result_Entries_key = reader.ReadWString(); + _391bf79b_ValueSet_result_Entries_value = new PropertyValue(); + int _00a83d10_depth; + _00a83d10_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_00a83d10_depth + 1)); + Bond.BondDataType _2db82cf6_fieldType; + ushort _2db82cf6_fieldId; + reader.ReadStructBegin(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 0)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_INT32)) + { + _391bf79b_ValueSet_result_Entries_value.Type = ((PropertyType)(reader.ReadInt32())); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_INT16)) + { + _391bf79b_ValueSet_result_Entries_value.Type = ((PropertyType)(reader.ReadInt16())); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_INT8)) + { + _391bf79b_ValueSet_result_Entries_value.Type = ((PropertyType)(reader.ReadInt8())); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_INT32, _2db82cf6_fieldType); + } + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 0)) + { + Bond.Expressions.ThrowExpression.ThrowRequiredFieldMissingException("PropertyValue", "Type"); + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 0)) + { + break; + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowRequiredFieldMissingException("PropertyValue", "Type"); + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 103)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_INT32)) + { + _391bf79b_ValueSet_result_Entries_value.Int32Value = reader.ReadInt32(); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_INT16)) + { + _391bf79b_ValueSet_result_Entries_value.Int32Value = ((int)(reader.ReadInt16())); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_INT8)) + { + _391bf79b_ValueSet_result_Entries_value.Int32Value = ((int)(reader.ReadInt8())); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_INT32, _2db82cf6_fieldType); + } + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 103)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 103)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 104)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_UINT32)) + { + _391bf79b_ValueSet_result_Entries_value.UInt32Value = reader.ReadUInt32(); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_UINT16)) + { + _391bf79b_ValueSet_result_Entries_value.UInt32Value = ((uint)(reader.ReadUInt16())); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_UINT8)) + { + _391bf79b_ValueSet_result_Entries_value.UInt32Value = ((uint)(reader.ReadUInt8())); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT32, _2db82cf6_fieldType); + } + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 104)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 104)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 106)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_UINT64)) + { + _391bf79b_ValueSet_result_Entries_value.UInt64Value = reader.ReadUInt64(); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_UINT32)) + { + _391bf79b_ValueSet_result_Entries_value.UInt64Value = ((ulong)(reader.ReadUInt32())); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_UINT16)) + { + _391bf79b_ValueSet_result_Entries_value.UInt64Value = ((ulong)(reader.ReadUInt16())); + } + else + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_UINT8)) + { + _391bf79b_ValueSet_result_Entries_value.UInt64Value = ((ulong)(reader.ReadUInt8())); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT64, _2db82cf6_fieldType); + } + } + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 106)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 106)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 114)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_LIST)) + { + int _0bf12c4c_depth; + _0bf12c4c_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_0bf12c4c_depth + 1)); + int _4b52afdb_count; + Bond.BondDataType _4b52afdb_elementType; + reader.ReadContainerBegin(out _4b52afdb_count, out _4b52afdb_elementType); + if ((_4b52afdb_elementType == Bond.BondDataType.BT_STRUCT)) + { + UUID _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item; + int _49775e32_ValueSet_result_Entries_value_GuidArrayValue_count; + _49775e32_ValueSet_result_Entries_value_GuidArrayValue_count = _4b52afdb_count; + if ((_49775e32_ValueSet_result_Entries_value_GuidArrayValue_count > 65536)) + { + _49775e32_ValueSet_result_Entries_value_GuidArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.GuidArrayValue.Capacity = _49775e32_ValueSet_result_Entries_value_GuidArrayValue_count; + for ( + ; ; + ) + { + if (((_4b52afdb_count + = (_4b52afdb_count - 1)) + >= 0)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item = new UUID(); + int _41c94fad_depth; + _41c94fad_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_41c94fad_depth + 1)); + Bond.BondDataType _6eae1f75_fieldType; + ushort _6eae1f75_fieldId; + reader.ReadStructBegin(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + for ( + ; ; + ) + { + if ((((int)(_6eae1f75_fieldType)) > 1)) + { + if ((_6eae1f75_fieldId == 0)) + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT32)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data1 = reader.ReadUInt32(); + } + else + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT16)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data1 = ((uint)(reader.ReadUInt16())); + } + else + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT8)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data1 = ((uint)(reader.ReadUInt8())); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT32, _6eae1f75_fieldType); + } + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + break; + } + else + { + if ((_6eae1f75_fieldId > 0)) + { + break; + } + else + { + reader.Skip(_6eae1f75_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + if ((_6eae1f75_fieldId > 0)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_6eae1f75_fieldType)) > 1)) + { + if ((_6eae1f75_fieldId == 1)) + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT16)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data2 = reader.ReadUInt16(); + } + else + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT8)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data2 = ((ushort)(reader.ReadUInt8())); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT16, _6eae1f75_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + break; + } + else + { + if ((_6eae1f75_fieldId > 1)) + { + break; + } + else + { + reader.Skip(_6eae1f75_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + if ((_6eae1f75_fieldId > 1)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_6eae1f75_fieldType)) > 1)) + { + if ((_6eae1f75_fieldId == 2)) + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT16)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data3 = reader.ReadUInt16(); + } + else + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT8)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data3 = ((ushort)(reader.ReadUInt8())); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT16, _6eae1f75_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + break; + } + else + { + if ((_6eae1f75_fieldId > 2)) + { + break; + } + else + { + reader.Skip(_6eae1f75_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + if ((_6eae1f75_fieldId > 2)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_6eae1f75_fieldType)) > 1)) + { + if ((_6eae1f75_fieldId == 3)) + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT64)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data4 = reader.ReadUInt64(); + } + else + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT32)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data4 = ((ulong)(reader.ReadUInt32())); + } + else + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT16)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data4 = ((ulong)(reader.ReadUInt16())); + } + else + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_UINT8)) + { + _255a4846_ValueSet_result_Entries_value_GuidArrayValue_item.Data4 = ((ulong)(reader.ReadUInt8())); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT64, _6eae1f75_fieldType); + } + } + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + break; + } + else + { + if ((_6eae1f75_fieldId > 3)) + { + break; + } + else + { + reader.Skip(_6eae1f75_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + if ((_6eae1f75_fieldId > 3)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((_6eae1f75_fieldType != Bond.BondDataType.BT_STOP)) + { + if ((_6eae1f75_fieldType == Bond.BondDataType.BT_STOP_BASE)) + { + } + else + { + reader.Skip(_6eae1f75_fieldType); + reader.ReadFieldEnd(); + } + reader.ReadFieldBegin(out _6eae1f75_fieldType, out _6eae1f75_fieldId); + } + else + { + break; + } + } + reader.ReadStructEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_41c94fad_depth); + } + _391bf79b_ValueSet_result_Entries_value.GuidArrayValue.Add(_255a4846_ValueSet_result_Entries_value_GuidArrayValue_item); + } + else + { + break; + } + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_STRUCT, _4b52afdb_elementType); + } + reader.ReadContainerEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_0bf12c4c_depth); + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_LIST, _2db82cf6_fieldType); + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 114)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 114)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 119)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_STRING)) + { + _391bf79b_ValueSet_result_Entries_value.StringValue = reader.ReadString(); + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_STRING, _2db82cf6_fieldType); + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 119)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 119)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 200)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_LIST)) + { + int _46fafc9f_depth; + _46fafc9f_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_46fafc9f_depth + 1)); + int _3b964678_count; + Bond.BondDataType _3b964678_elementType; + reader.ReadContainerBegin(out _3b964678_count, out _3b964678_elementType); + if ((_3b964678_elementType == Bond.BondDataType.BT_UINT8)) + { + byte _2b58c582_ValueSet_result_Entries_value_UInt8ArrayValue_item; + int _a60e5e17_ValueSet_result_Entries_value_UInt8ArrayValue_count; + _a60e5e17_ValueSet_result_Entries_value_UInt8ArrayValue_count = _3b964678_count; + if ((_a60e5e17_ValueSet_result_Entries_value_UInt8ArrayValue_count > 65536)) + { + _a60e5e17_ValueSet_result_Entries_value_UInt8ArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.UInt8ArrayValue.Capacity = _a60e5e17_ValueSet_result_Entries_value_UInt8ArrayValue_count; + for ( + ; ; + ) + { + if (((_3b964678_count + = (_3b964678_count - 1)) + >= 0)) + { + _2b58c582_ValueSet_result_Entries_value_UInt8ArrayValue_item = reader.ReadUInt8(); + _391bf79b_ValueSet_result_Entries_value.UInt8ArrayValue.Add(_2b58c582_ValueSet_result_Entries_value_UInt8ArrayValue_item); + } + else + { + break; + } + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT8, _3b964678_elementType); + } + reader.ReadContainerEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_46fafc9f_depth); + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_LIST, _2db82cf6_fieldType); + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 200)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 200)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 204)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_LIST)) + { + int _8c96f4cd_depth; + _8c96f4cd_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_8c96f4cd_depth + 1)); + int _49eced37_count; + Bond.BondDataType _49eced37_elementType; + reader.ReadContainerBegin(out _49eced37_count, out _49eced37_elementType); + if ((_49eced37_elementType == Bond.BondDataType.BT_UINT32)) + { + uint _33267384_ValueSet_result_Entries_value_UInt32ArrayValue_item; + int _1ee17e9d_ValueSet_result_Entries_value_UInt32ArrayValue_count; + _1ee17e9d_ValueSet_result_Entries_value_UInt32ArrayValue_count = _49eced37_count; + if ((_1ee17e9d_ValueSet_result_Entries_value_UInt32ArrayValue_count > 65536)) + { + _1ee17e9d_ValueSet_result_Entries_value_UInt32ArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.UInt32ArrayValue.Capacity = _1ee17e9d_ValueSet_result_Entries_value_UInt32ArrayValue_count; + for ( + ; ; + ) + { + if (((_49eced37_count + = (_49eced37_count - 1)) + >= 0)) + { + _33267384_ValueSet_result_Entries_value_UInt32ArrayValue_item = reader.ReadUInt32(); + _391bf79b_ValueSet_result_Entries_value.UInt32ArrayValue.Add(_33267384_ValueSet_result_Entries_value_UInt32ArrayValue_item); + } + else + { + break; + } + } + } + else + { + if ((_49eced37_elementType == Bond.BondDataType.BT_UINT16)) + { + uint _9c1fba9b_ValueSet_result_Entries_value_UInt32ArrayValue_item; + int _e95911f5_ValueSet_result_Entries_value_UInt32ArrayValue_count; + _e95911f5_ValueSet_result_Entries_value_UInt32ArrayValue_count = _49eced37_count; + if ((_e95911f5_ValueSet_result_Entries_value_UInt32ArrayValue_count > 65536)) + { + _e95911f5_ValueSet_result_Entries_value_UInt32ArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.UInt32ArrayValue.Capacity = _e95911f5_ValueSet_result_Entries_value_UInt32ArrayValue_count; + for ( + ; ; + ) + { + if (((_49eced37_count + = (_49eced37_count - 1)) + >= 0)) + { + _9c1fba9b_ValueSet_result_Entries_value_UInt32ArrayValue_item = ((uint)(reader.ReadUInt16())); + _391bf79b_ValueSet_result_Entries_value.UInt32ArrayValue.Add(_9c1fba9b_ValueSet_result_Entries_value_UInt32ArrayValue_item); + } + else + { + break; + } + } + } + else + { + if ((_49eced37_elementType == Bond.BondDataType.BT_UINT8)) + { + uint _6623eaea_ValueSet_result_Entries_value_UInt32ArrayValue_item; + int _c2886692_ValueSet_result_Entries_value_UInt32ArrayValue_count; + _c2886692_ValueSet_result_Entries_value_UInt32ArrayValue_count = _49eced37_count; + if ((_c2886692_ValueSet_result_Entries_value_UInt32ArrayValue_count > 65536)) + { + _c2886692_ValueSet_result_Entries_value_UInt32ArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.UInt32ArrayValue.Capacity = _c2886692_ValueSet_result_Entries_value_UInt32ArrayValue_count; + for ( + ; ; + ) + { + if (((_49eced37_count + = (_49eced37_count - 1)) + >= 0)) + { + _6623eaea_ValueSet_result_Entries_value_UInt32ArrayValue_item = ((uint)(reader.ReadUInt8())); + _391bf79b_ValueSet_result_Entries_value.UInt32ArrayValue.Add(_6623eaea_ValueSet_result_Entries_value_UInt32ArrayValue_item); + } + else + { + break; + } + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT32, _49eced37_elementType); + } + } + } + reader.ReadContainerEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_8c96f4cd_depth); + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_LIST, _2db82cf6_fieldType); + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 204)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 204)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 206)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_LIST)) + { + int _092f826d_depth; + _092f826d_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_092f826d_depth + 1)); + int _068a9826_count; + Bond.BondDataType _068a9826_elementType; + reader.ReadContainerBegin(out _068a9826_count, out _068a9826_elementType); + if ((_068a9826_elementType == Bond.BondDataType.BT_UINT64)) + { + ulong _286a4476_ValueSet_result_Entries_value_UInt64ArrayValue_item; + int _abf48c3b_ValueSet_result_Entries_value_UInt64ArrayValue_count; + _abf48c3b_ValueSet_result_Entries_value_UInt64ArrayValue_count = _068a9826_count; + if ((_abf48c3b_ValueSet_result_Entries_value_UInt64ArrayValue_count > 65536)) + { + _abf48c3b_ValueSet_result_Entries_value_UInt64ArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.UInt64ArrayValue.Capacity = _abf48c3b_ValueSet_result_Entries_value_UInt64ArrayValue_count; + for ( + ; ; + ) + { + if (((_068a9826_count + = (_068a9826_count - 1)) + >= 0)) + { + _286a4476_ValueSet_result_Entries_value_UInt64ArrayValue_item = reader.ReadUInt64(); + _391bf79b_ValueSet_result_Entries_value.UInt64ArrayValue.Add(_286a4476_ValueSet_result_Entries_value_UInt64ArrayValue_item); + } + else + { + break; + } + } + } + else + { + if ((_068a9826_elementType == Bond.BondDataType.BT_UINT32)) + { + ulong _a60035a6_ValueSet_result_Entries_value_UInt64ArrayValue_item; + int _85c958cc_ValueSet_result_Entries_value_UInt64ArrayValue_count; + _85c958cc_ValueSet_result_Entries_value_UInt64ArrayValue_count = _068a9826_count; + if ((_85c958cc_ValueSet_result_Entries_value_UInt64ArrayValue_count > 65536)) + { + _85c958cc_ValueSet_result_Entries_value_UInt64ArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.UInt64ArrayValue.Capacity = _85c958cc_ValueSet_result_Entries_value_UInt64ArrayValue_count; + for ( + ; ; + ) + { + if (((_068a9826_count + = (_068a9826_count - 1)) + >= 0)) + { + _a60035a6_ValueSet_result_Entries_value_UInt64ArrayValue_item = ((ulong)(reader.ReadUInt32())); + _391bf79b_ValueSet_result_Entries_value.UInt64ArrayValue.Add(_a60035a6_ValueSet_result_Entries_value_UInt64ArrayValue_item); + } + else + { + break; + } + } + } + else + { + if ((_068a9826_elementType == Bond.BondDataType.BT_UINT16)) + { + ulong _64ac5d95_ValueSet_result_Entries_value_UInt64ArrayValue_item; + int _c9948e78_ValueSet_result_Entries_value_UInt64ArrayValue_count; + _c9948e78_ValueSet_result_Entries_value_UInt64ArrayValue_count = _068a9826_count; + if ((_c9948e78_ValueSet_result_Entries_value_UInt64ArrayValue_count > 65536)) + { + _c9948e78_ValueSet_result_Entries_value_UInt64ArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.UInt64ArrayValue.Capacity = _c9948e78_ValueSet_result_Entries_value_UInt64ArrayValue_count; + for ( + ; ; + ) + { + if (((_068a9826_count + = (_068a9826_count - 1)) + >= 0)) + { + _64ac5d95_ValueSet_result_Entries_value_UInt64ArrayValue_item = ((ulong)(reader.ReadUInt16())); + _391bf79b_ValueSet_result_Entries_value.UInt64ArrayValue.Add(_64ac5d95_ValueSet_result_Entries_value_UInt64ArrayValue_item); + } + else + { + break; + } + } + } + else + { + if ((_068a9826_elementType == Bond.BondDataType.BT_UINT8)) + { + ulong _a8668c04_ValueSet_result_Entries_value_UInt64ArrayValue_item; + int _473a9e9b_ValueSet_result_Entries_value_UInt64ArrayValue_count; + _473a9e9b_ValueSet_result_Entries_value_UInt64ArrayValue_count = _068a9826_count; + if ((_473a9e9b_ValueSet_result_Entries_value_UInt64ArrayValue_count > 65536)) + { + _473a9e9b_ValueSet_result_Entries_value_UInt64ArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.UInt64ArrayValue.Capacity = _473a9e9b_ValueSet_result_Entries_value_UInt64ArrayValue_count; + for ( + ; ; + ) + { + if (((_068a9826_count + = (_068a9826_count - 1)) + >= 0)) + { + _a8668c04_ValueSet_result_Entries_value_UInt64ArrayValue_item = ((ulong)(reader.ReadUInt8())); + _391bf79b_ValueSet_result_Entries_value.UInt64ArrayValue.Add(_a8668c04_ValueSet_result_Entries_value_UInt64ArrayValue_item); + } + else + { + break; + } + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_UINT64, _068a9826_elementType); + } + } + } + } + reader.ReadContainerEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_092f826d_depth); + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_LIST, _2db82cf6_fieldType); + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 206)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 206)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((((int)(_2db82cf6_fieldType)) > 1)) + { + if ((_2db82cf6_fieldId == 219)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_LIST)) + { + int _3df22921_depth; + _3df22921_depth = Bond.MaxDepthChecker.ValidateDepthForIncrement(); + try + { + Bond.MaxDepthChecker.SetDepth((_3df22921_depth + 1)); + int _9c542f93_count; + Bond.BondDataType _9c542f93_elementType; + reader.ReadContainerBegin(out _9c542f93_count, out _9c542f93_elementType); + if ((_9c542f93_elementType == Bond.BondDataType.BT_STRING)) + { + string _f9c18fe1_ValueSet_result_Entries_value_StringArrayValue_item; + int _b47fb1bf_ValueSet_result_Entries_value_StringArrayValue_count; + _b47fb1bf_ValueSet_result_Entries_value_StringArrayValue_count = _9c542f93_count; + if ((_b47fb1bf_ValueSet_result_Entries_value_StringArrayValue_count > 65536)) + { + _b47fb1bf_ValueSet_result_Entries_value_StringArrayValue_count = 65536; + } + _391bf79b_ValueSet_result_Entries_value.StringArrayValue.Capacity = _b47fb1bf_ValueSet_result_Entries_value_StringArrayValue_count; + for ( + ; ; + ) + { + if (((_9c542f93_count + = (_9c542f93_count - 1)) + >= 0)) + { + _f9c18fe1_ValueSet_result_Entries_value_StringArrayValue_item = reader.ReadString(); + _391bf79b_ValueSet_result_Entries_value.StringArrayValue.Add(_f9c18fe1_ValueSet_result_Entries_value_StringArrayValue_item); + } + else + { + break; + } + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_STRING, _9c542f93_elementType); + } + reader.ReadContainerEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_3df22921_depth); + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_LIST, _2db82cf6_fieldType); + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + break; + } + else + { + if ((_2db82cf6_fieldId > 219)) + { + break; + } + else + { + reader.Skip(_2db82cf6_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + if ((_2db82cf6_fieldId > 219)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((_2db82cf6_fieldType != Bond.BondDataType.BT_STOP)) + { + if ((_2db82cf6_fieldType == Bond.BondDataType.BT_STOP_BASE)) + { + } + else + { + reader.Skip(_2db82cf6_fieldType); + reader.ReadFieldEnd(); + } + reader.ReadFieldBegin(out _2db82cf6_fieldType, out _2db82cf6_fieldId); + } + else + { + break; + } + } + reader.ReadStructEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_00a83d10_depth); + } + _7aa17938_ValueSet_result.Entries[_391bf79b_ValueSet_result_Entries_key] = _391bf79b_ValueSet_result_Entries_value; + } + else + { + break; + } + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_STRUCT, _fa06a779_valueType); + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_WSTRING, _fa06a779_keyType); + } + reader.ReadContainerEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_90463c3d_depth); + } + } + else + { + Bond.Expressions.ThrowExpression.ThrowInvalidTypeException(Bond.BondDataType.BT_MAP, _c7f2a99e_fieldType); + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _c7f2a99e_fieldType, out _c7f2a99e_fieldId); + break; + } + else + { + if ((_c7f2a99e_fieldId > 1)) + { + break; + } + else + { + reader.Skip(_c7f2a99e_fieldType); + } + } + reader.ReadFieldEnd(); + reader.ReadFieldBegin(out _c7f2a99e_fieldType, out _c7f2a99e_fieldId); + if ((_c7f2a99e_fieldId > 1)) + { + break; + } + } + else + { + break; + } + } + for ( + ; ; + ) + { + if ((_c7f2a99e_fieldType != Bond.BondDataType.BT_STOP)) + { + if ((_c7f2a99e_fieldType == Bond.BondDataType.BT_STOP_BASE)) + { + } + else + { + reader.Skip(_c7f2a99e_fieldType); + reader.ReadFieldEnd(); + } + reader.ReadFieldBegin(out _c7f2a99e_fieldType, out _c7f2a99e_fieldId); + } + else + { + break; + } + } + reader.ReadStructEnd(); + } + finally + { + Bond.MaxDepthChecker.SetDepth(_4dde9690_depth); + } + return ((object)(_7aa17938_ValueSet_result)); + } + } +} diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/MaxDepthChecker.cs b/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/MaxDepthChecker.cs new file mode 100644 index 00000000..09d0016d --- /dev/null +++ b/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/MaxDepthChecker.cs @@ -0,0 +1,49 @@ +using System.Diagnostics; +using System.Runtime.CompilerServices; + +namespace Bond; + +/// +/// Provides utility methods for tracking recursion depth and throwing an exception when the +/// tracked depth has exceeded DeserializerControls.Active.MaxDepth. +/// +internal static class MaxDepthChecker +{ + /// The depth tracked for the current thread. + /// + /// This needn't correspond 1:1 with schema structure. It is an approximate representation of how deeply deserialization + /// has recurred, in order to provide a defense-in-depth measure against stack overflows. + /// + [ThreadStatic] + static int t_depth; + + /// Validates the current depth against the limit, assuming it's about to be incremented, and returns it. + /// Recursion depth exceeded DeserializerControls.MaxDepth. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int ValidateDepthForIncrement() + { + int depth = t_depth; + Debug.Assert(depth >= 0); + + // Check with >= rather than > as we're validating depth+1. + if (depth >= DeserializerControls.Active.MaxDepth) + { + ThrowTooDeepException(); + } + + return depth; + } + + /// Sets the tracked depth. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void SetDepth(int depth) + { + Debug.Assert(depth >= 0 && depth <= DeserializerControls.Active.MaxDepth); + t_depth = depth; + } + + /// Undoes an increment to the current depth and throws an exception indicating max depth exceeded. + [MethodImpl(MethodImplOptions.NoInlining)] + private static void ThrowTooDeepException() => + throw new InvalidDataException($"Recursion depth exceeded {nameof(DeserializerControls)}.{nameof(DeserializerControls.MaxDepth)}"); +} diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/ThrowExpression.cs b/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/ThrowExpression.cs new file mode 100644 index 00000000..15d33300 --- /dev/null +++ b/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/ThrowExpression.cs @@ -0,0 +1,39 @@ +using System.Runtime.CompilerServices; + +namespace Bond.Expressions; + +/// +/// ThrowExpression is a utility that makes it easy to create expressions that throw exceptions. +/// +internal static class ThrowExpression +{ + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowInvalidTypeException(BondDataType actualType) + { + throw new InvalidDataException(string.Format("Invalid type {0}", actualType)); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowInvalidTypeException(BondDataType expectedType, BondDataType actualType) + { + throw new InvalidDataException(string.Format("Invalid type {0}, expected {1}", actualType, expectedType)); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowInvalidDataException(string message) + { + throw new InvalidDataException(message); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowRequiredFieldMissingException(string schema, string field) + { + throw new InvalidDataException(string.Format("Required field {0}.{1} missing", schema, field)); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowRequiredFieldsMissingException(List names, int index) + { + throw new InvalidDataException(string.Format("Required field {0} missing", names[index])); + } +} diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/ValueSet.cs b/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/ValueSet.cs index cc0a3220..6bec144f 100644 --- a/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/ValueSet.cs +++ b/lib/ShortDev.Microsoft.ConnectedDevices/Serialization/ValueSet.cs @@ -1,5 +1,4 @@ -using Bond; -using Bond.IO.Unsafe; +using Bond.IO.Unsafe; using Bond.Protocols; namespace ShortDev.Microsoft.ConnectedDevices.Serialization; @@ -12,14 +11,14 @@ public static ValueSet Parse(ref HeapEndianReader reader) byte[] data = new byte[reader.Stream.Length - reader.Stream.Position]; reader.ReadBytes(data); CompactBinaryReader bondReader = new(new(data)); - return Deserialize.From(bondReader); + return (ValueSet)ValueSetHelper.Deserialize(bondReader); } public void Write(ref TWriter writer) where TWriter : struct, IEndianWriter, allows ref struct { OutputBuffer buffer = new(); CompactBinaryWriter bondWriter = new(buffer); - Serialize.To(bondWriter, this); + ValueSetHelper.Serialize(this, bondWriter); writer.Write(buffer.Data); } diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/ShortDev.Microsoft.ConnectedDevices.csproj b/lib/ShortDev.Microsoft.ConnectedDevices/ShortDev.Microsoft.ConnectedDevices.csproj index 4b3eab38..558cf528 100644 --- a/lib/ShortDev.Microsoft.ConnectedDevices/ShortDev.Microsoft.ConnectedDevices.csproj +++ b/lib/ShortDev.Microsoft.ConnectedDevices/ShortDev.Microsoft.ConnectedDevices.csproj @@ -10,7 +10,7 @@ - + From b758bb9abd0b4777ed9faa2bae452159f047d8de Mon Sep 17 00:00:00 2001 From: Lukas Kurz Date: Thu, 14 May 2026 00:50:49 +0200 Subject: [PATCH 3/5] Fix json deserialization --- .../Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs b/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs index 1127b319..fe7bc60d 100644 --- a/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs +++ b/lib/ShortDev.Microsoft.ConnectedDevices/Messages/Connection/DeviceInfo/DeviceInfoJsonContext.cs @@ -2,5 +2,5 @@ namespace ShortDev.Microsoft.ConnectedDevices.Messages.Connection.DeviceInfo; -[JsonSerializable(typeof(CdpDeviceInfo), GenerationMode = JsonSourceGenerationMode.Serialization)] +[JsonSerializable(typeof(CdpDeviceInfo))] internal sealed partial class DeviceInfoJsonContext : JsonSerializerContext; From 80932918846f7cdefe69cb4bc42b87b310ba2dde Mon Sep 17 00:00:00 2001 From: Lukas Kurz Date: Thu, 14 May 2026 00:51:03 +0200 Subject: [PATCH 4/5] Mark Aot compatible --- lib/NearShare.ViewModels/NearShare.ViewModels.csproj | 1 + .../ShortDev.Microsoft.ConnectedDevices.NearShare.csproj | 1 + .../ShortDev.Microsoft.ConnectedDevices.csproj | 1 + 3 files changed, 3 insertions(+) diff --git a/lib/NearShare.ViewModels/NearShare.ViewModels.csproj b/lib/NearShare.ViewModels/NearShare.ViewModels.csproj index 92dc738d..5ebdc7fd 100644 --- a/lib/NearShare.ViewModels/NearShare.ViewModels.csproj +++ b/lib/NearShare.ViewModels/NearShare.ViewModels.csproj @@ -3,6 +3,7 @@ net10.0 nullable + true diff --git a/lib/ShortDev.Microsoft.ConnectedDevices.NearShare/ShortDev.Microsoft.ConnectedDevices.NearShare.csproj b/lib/ShortDev.Microsoft.ConnectedDevices.NearShare/ShortDev.Microsoft.ConnectedDevices.NearShare.csproj index 85561d53..d18cf1bd 100644 --- a/lib/ShortDev.Microsoft.ConnectedDevices.NearShare/ShortDev.Microsoft.ConnectedDevices.NearShare.csproj +++ b/lib/ShortDev.Microsoft.ConnectedDevices.NearShare/ShortDev.Microsoft.ConnectedDevices.NearShare.csproj @@ -2,6 +2,7 @@ net10.0 + true diff --git a/lib/ShortDev.Microsoft.ConnectedDevices/ShortDev.Microsoft.ConnectedDevices.csproj b/lib/ShortDev.Microsoft.ConnectedDevices/ShortDev.Microsoft.ConnectedDevices.csproj index 558cf528..183cc6a5 100644 --- a/lib/ShortDev.Microsoft.ConnectedDevices/ShortDev.Microsoft.ConnectedDevices.csproj +++ b/lib/ShortDev.Microsoft.ConnectedDevices/ShortDev.Microsoft.ConnectedDevices.csproj @@ -5,6 +5,7 @@ Nullable 0.1.0 true + true From cc317a679839191aefe75ab14940cb6b2e7510fc Mon Sep 17 00:00:00 2001 From: Lukas Kurz Date: Thu, 14 May 2026 00:54:53 +0200 Subject: [PATCH 5/5] Enable trimming --- src/NearShare.Android.csproj | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/NearShare.Android.csproj b/src/NearShare.Android.csproj index 8d1f5e73..b1d8d213 100644 --- a/src/NearShare.Android.csproj +++ b/src/NearShare.Android.csproj @@ -13,9 +13,8 @@ NearShare - + False - false aab