Files
mROA/mROA.Cbor/IOrdinaryStructureParser.cs
T

106 lines
4.0 KiB
C#
Raw Normal View History

2025-07-09 17:15:55 +03:00
using System;
2025-07-26 19:51:54 +03:00
using System.Formats.Cbor;
2025-07-09 17:15:55 +03:00
using mROA.Abstract;
using mROA.Implementation;
using mROA.Implementation.CommandExecution;
namespace mROA.Cbor
{
public interface IOrdinaryStructureParser
{
void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization);
object Read(CborReader reader, IEndPointContext context, CborSerializationToolkit serialization);
}
2025-08-03 00:32:32 +03:00
public class CallRequestParser : IOrdinaryStructureParser
2025-07-09 17:15:55 +03:00
{
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
{
2025-08-03 00:32:32 +03:00
var v = (CallRequest)value;
2025-07-09 17:15:55 +03:00
writer.WriteStartArray(4);
2025-07-27 23:46:54 +03:00
v.Id.WriteToCborInline(writer);
// writer.WriteByteString(v.Id.ToByteArray());
2025-07-09 17:15:55 +03:00
writer.WriteInt32(v.CommandId);
writer.WriteUInt64(v.ObjectId.Flat);
serialization.WriteData(v.Parameters, writer, context);
writer.WriteEndArray();
}
public object Read(CborReader reader, IEndPointContext context, CborSerializationToolkit serialization)
{
reader.ReadStartArray();
2025-08-03 00:32:32 +03:00
var value = new CallRequest
2025-07-09 17:15:55 +03:00
{
2025-07-27 00:14:15 +03:00
Id = new RequestId(reader.ReadByteString()),
2025-07-09 17:15:55 +03:00
CommandId = reader.ReadInt32(),
ObjectId = (ComplexObjectIdentifier)ComplexObjectIdentifierParser.Instance.Read(reader, context, serialization),
Parameters = serialization.ReadData(reader, typeof(object[]), context) as object[]
};
reader.ReadEndArray();
return value;
}
}
public class ComplexObjectIdentifierParser : IOrdinaryStructureParser
{
public static readonly ComplexObjectIdentifierParser Instance = new();
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
{
writer.WriteUInt64(((ComplexObjectIdentifier)value).Flat);
}
public object Read(CborReader reader, IEndPointContext context, CborSerializationToolkit serialization)
{
var value = new ComplexObjectIdentifier { Flat = reader.ReadUInt64() };
return value;
}
}
public class FinalCommandExecutionParser : IOrdinaryStructureParser
{
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
{
2025-07-10 10:25:40 +03:00
var v = (FinalCommandExecution<object>)value;
2025-07-09 17:15:55 +03:00
writer.WriteStartArray(2);
2025-07-27 23:46:54 +03:00
// writer.WriteByteString(v.Id.ToByteArray());
v.Id.WriteToCborInline(writer);
2025-07-10 10:25:40 +03:00
serialization.WriteData(v.Result, writer, context);
2025-07-09 17:15:55 +03:00
writer.WriteEndArray();
}
public object Read(CborReader reader, IEndPointContext context, CborSerializationToolkit serialization)
{
reader.ReadStartArray();
var result = new FinalCommandExecution<object>
{
2025-07-27 00:14:15 +03:00
Id = new RequestId(reader.ReadByteString()),
2025-07-09 17:15:55 +03:00
Result = serialization.ReadData(reader, typeof(object), context),
};
reader.ReadEndArray();
return result;
}
}
public class FinalCommandExecutionResultlessParser : IOrdinaryStructureParser
{
public void Write(CborWriter writer, object value, IEndPointContext context, CborSerializationToolkit serialization)
{
2025-07-10 10:25:40 +03:00
var v = (FinalCommandExecution)value;
2025-07-09 17:15:55 +03:00
writer.WriteStartArray(1);
2025-07-27 23:46:54 +03:00
// writer.WriteByteString(v.Id.ToByteArray());
v.Id.WriteToCborInline(writer);
2025-07-09 17:15:55 +03:00
writer.WriteEndArray();
}
public object Read(CborReader reader, IEndPointContext context, CborSerializationToolkit serialization)
{
reader.ReadStartArray();
var result = new FinalCommandExecution
{
2025-07-27 00:14:15 +03:00
Id = new RequestId(reader.ReadByteString())
2025-07-09 17:15:55 +03:00
};
reader.ReadEndArray();
return result;
}
}
}