feat: store shard status in Redis
This commit is contained in:
22
PluralKit.Core/Utils/ProtobufUtils.cs
Normal file
22
PluralKit.Core/Utils/ProtobufUtils.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using Google.Protobuf;
|
||||
|
||||
namespace PluralKit.Core;
|
||||
|
||||
public static class Proto
|
||||
{
|
||||
private static Dictionary<string, MessageParser> _parser = new();
|
||||
|
||||
public static byte[] Marshal(this IMessage message) => message.ToByteArray();
|
||||
|
||||
public static T Unmarshal<T>(this byte[] message) where T : IMessage<T>, new()
|
||||
{
|
||||
var type = typeof(T).ToString();
|
||||
if (_parser.ContainsKey(type))
|
||||
return (T)_parser[type].ParseFrom(message);
|
||||
else
|
||||
{
|
||||
_parser.Add(type, new MessageParser<T>(() => new T()));
|
||||
return Unmarshal<T>(message);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user