Files
DynamicProtobuf.Runtime/DynamicCodec.cs
2025-12-30 07:57:34 +07:00

152 lines
6.5 KiB
C#

using Google.Protobuf;
using Google.Protobuf.Collections;
namespace DynamicProtobuf.Runtime;
public static class DynamicCodec
{
public static FieldCodec<string> ForString(string fullName, string fieldName) => ForString(fullName, fieldName, "");
public static FieldCodec<ByteString> ForBytes(string fullName, string fieldName) => ForBytes(fullName, fieldName, ByteString.Empty);
public static FieldCodec<bool> ForBool(string fullName, string fieldName) => ForBool(fullName, fieldName, false);
public static FieldCodec<int> ForInt32(string fullName, string fieldName) => ForInt32(fullName, fieldName, 0);
public static FieldCodec<int> ForSInt32(string fullName, string fieldName) => ForSInt32(fullName, fieldName, 0);
public static FieldCodec<uint> ForFixed32(string fullName, string fieldName) => ForFixed32(fullName, fieldName, 0);
public static FieldCodec<int> ForSFixed32(string fullName, string fieldName) => ForSFixed32(fullName, fieldName, 0);
public static FieldCodec<uint> ForUInt32(string fullName, string fieldName) => ForUInt32(fullName, fieldName, 0);
public static FieldCodec<long> ForInt64(string fullName, string fieldName) => ForInt64(fullName, fieldName, 0);
public static FieldCodec<long> ForSInt64(string fullName, string fieldName) => ForSInt64(fullName, fieldName, 0);
public static FieldCodec<ulong> ForFixed64(string fullName, string fieldName) => ForFixed64(fullName, fieldName, 0);
public static FieldCodec<long> ForSFixed64(string fullName, string fieldName) => ForSFixed64(fullName, fieldName, 0);
public static FieldCodec<ulong> ForUInt64(string fullName, string fieldName) => ForUInt64(fullName, fieldName, 0);
public static FieldCodec<float> ForFloat(string fullName, string fieldName) => ForFloat(fullName, fieldName, 0);
public static FieldCodec<double> ForDouble(string fullName, string fieldName) => ForDouble(fullName, fieldName, 0);
public static FieldCodec<T?> ForEnum<T>(string fullName, string fieldName, Func<T?, int> toInt32, Func<int, T> fromInt32) =>
ForEnum(fullName, fieldName, toInt32, fromInt32, default);
public static FieldCodec<string> ForString(string fullName, string fieldName, string defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForString(tag, defaultValue);
}
public static FieldCodec<ByteString> ForBytes(string fullName, string fieldName, ByteString defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForBytes(tag, defaultValue);
}
public static FieldCodec<bool> ForBool(string fullName, string fieldName, bool defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForBool(tag, defaultValue);
}
public static FieldCodec<int> ForInt32(string fullName, string fieldName, int defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForInt32(tag, defaultValue);
}
public static FieldCodec<int> ForSInt32(string fullName, string fieldName, int defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForSInt32(tag, defaultValue);
}
public static FieldCodec<uint> ForFixed32(string fullName, string fieldName, uint defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForFixed32(tag);
}
public static FieldCodec<int> ForSFixed32(string fullName, string fieldName, int defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForSFixed32(tag, defaultValue);
}
public static FieldCodec<uint> ForUInt32(string fullName, string fieldName, uint defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForUInt32(tag, defaultValue);
}
public static FieldCodec<long> ForInt64(string fullName, string fieldName, long defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForInt64(tag, defaultValue);
}
public static FieldCodec<long> ForSInt64(string fullName, string fieldName, long defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForSInt64(tag, defaultValue);
}
public static FieldCodec<ulong> ForFixed64(string fullName, string fieldName, ulong defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForFixed64(tag, defaultValue);
}
public static FieldCodec<long> ForSFixed64(string fullName, string fieldName, long defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForSFixed64(tag, defaultValue);
}
public static FieldCodec<ulong> ForUInt64(string fullName, string fieldName, ulong defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForUInt64(tag, defaultValue);
}
public static FieldCodec<float> ForFloat(string fullName, string fieldName, float defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForFloat(tag, defaultValue);
}
public static FieldCodec<double> ForDouble(string fullName, string fieldName, double defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForDouble(tag, defaultValue);
}
public static FieldCodec<T> ForEnum<T>(string fullName, string fieldName, Func<T, int> toInt32, Func<int, T> fromInt32, T defaultValue)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForEnum(tag, toInt32, fromInt32, defaultValue);
}
public static MapField<TKey, TValue>.Codec ForMap<TKey, TValue>(string fullName, string fieldName, FieldCodec<TKey> keyCodec,
FieldCodec<TValue> valueCodec)
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return new MapField<TKey, TValue>.Codec(keyCodec, valueCodec, tag);
}
public static FieldCodec<T> ForMessage<T>(string fullName, string fieldName, MessageParser<T> parser)
where T : class, IMessage<T>
{
uint tag = DynamicFieldRegistry.GetTag(fullName, fieldName);
return FieldCodec.ForMessage(tag, parser);
}
}