2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2025-12-14 00:40:26 +00:00

test complete

This commit is contained in:
2025-11-08 12:36:22 +03:00
parent fc943c8a36
commit e2e4ac90bc
11 changed files with 238 additions and 121 deletions

View File

@@ -609,7 +609,7 @@ public static class DataSerializer
var tru = TRU.FromType(type);
byte[] composed = TypedArrayComposer(value, tru, warehouse, connection);
if (composed == null)
return new TDU(TDUIdentifier.Null, new byte[0], 0);
@@ -681,7 +681,7 @@ public static class DataSerializer
return new TDU(TDUIdentifier.TypedMap, all, (uint)all.Length, metadata);
//return new TDU(TDUIdentifier.TypedMap, rt.ToArray(), (uint)rt.Count,
// );
@@ -884,7 +884,7 @@ public static class DataSerializer
public static unsafe TDU RecordComposer(object value, Warehouse warehouse, DistributedConnection connection)
{
var rt = new List<byte>();// BinaryList();
var rt = new List<byte>();
var record = (IRecord)value;
var template = warehouse.GetTemplateByType(record.GetType());
@@ -900,12 +900,12 @@ public static class DataSerializer
var tdu = Codec.ComposeInternal(propValue, warehouse, connection);
if (pt.ValueType.IsTyped() && // pt.ValueType.Identifier == TRUIdentifier.TypedRecord &&
if (pt.ValueType.IsTyped() &&
pt.ValueType.Match(tru))
{
// strip metadata
var len = (uint)tdu.Composed.Length - tdu.ContentOffset;
tdu = new TDU(TDUIdentifier.TypeOfTarget,
tdu = new TDU(TDUIdentifier.TypeOfTarget,
tdu.Composed.Clip(tdu.ContentOffset, len), len);
}
@@ -940,22 +940,40 @@ public static class DataSerializer
var fields = value.GetType().GetFields();
var list = fields.Select(x => x.GetValue(value)).ToArray();
var types = fields.Select(x => TRU.FromType(x.FieldType).Compose()).ToArray();
var trus = fields.Select(x => TRU.FromType(x.FieldType)).ToArray();
var metadata = new List<byte>();
foreach (var t in types)
metadata.AddRange(t);
var composed = DynamicArrayComposer(list, warehouse, connection);
foreach (var t in trus)
metadata.AddRange(t.Compose());
if (composed == null)
return new TDU(TDUIdentifier.Null, new byte[0], 0);
else
var rt = new List<byte>();
for (var i = 0; i < fields.Length; i++)
{
return new TDU(TDUIdentifier.TypedTuple, composed,
(uint)composed.Length, metadata.ToArray());
var tupleValue = list[i];
var targetTru = trus[i];
var tdu = Codec.ComposeInternal(tupleValue, warehouse, connection);
var valueTru = TRU.FromType(tupleValue?.GetType());
if (targetTru.IsTyped() &&
targetTru.Match(valueTru))
{
// strip metadata
var len = (uint)tdu.Composed.Length - tdu.ContentOffset;
tdu = new TDU(TDUIdentifier.TypeOfTarget,
tdu.Composed.Clip(tdu.ContentOffset, len), len);
}
rt.AddRange(tdu.Composed);
}
return new TDU(TDUIdentifier.TypedTuple, rt.ToArray(),
(uint)rt.Count, metadata.ToArray());
}
}