diff --git a/StackExchange.Redis.Extensions.sln b/StackExchange.Redis.Extensions.sln index 185911a3..10b79739 100644 --- a/StackExchange.Redis.Extensions.sln +++ b/StackExchange.Redis.Extensions.sln @@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StackExchange.Redis.Extensi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StackExchange.Redis.Extensions.Protobuf", "src\serializers\StackExchange.Redis.Extensions.Protobuf\StackExchange.Redis.Extensions.Protobuf.csproj", "{11FC924C-275C-453F-8923-8AEF7EC90B82}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StackExchange.Redis.Extensions.Bebop", "src\serializers\StackExchange.Redis.Extensions.Bebop\StackExchange.Redis.Extensions.Bebop.csproj", "{5CCD8D5D-EBCA-4C6E-A345-F81666A53A6D}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StackExchange.Redis.Extensions.System.Text.Json", "src\serializers\StackExchange.Redis.Extensions.System.Text.Json\StackExchange.Redis.Extensions.System.Text.Json.csproj", "{C83F298E-4FE1-4128-89C1-EECB676FA913}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StackExchange.Redis.Extensions.Utf8Json", "src\serializers\StackExchange.Redis.Extensions.Utf8Json\StackExchange.Redis.Extensions.Utf8Json.csproj", "{3AB92D8A-14CB-4551-8C37-569067B9D6A5}" diff --git a/src/serializers/StackExchange.Redis.Extensions.Bebop/BebopSerializer.cs b/src/serializers/StackExchange.Redis.Extensions.Bebop/BebopSerializer.cs new file mode 100644 index 00000000..639a1d22 --- /dev/null +++ b/src/serializers/StackExchange.Redis.Extensions.Bebop/BebopSerializer.cs @@ -0,0 +1,30 @@ +using System; +using Bebop.Runtime; + +using StackExchange.Redis.Extensions.Core; + +namespace StackExchange.Redis.Extensions.Bebop +{ + /// + /// Bebop implementation of + /// + public class BebopSerializer : ISerializer + { + /// + public byte[] Serialize(object item) + { + var record = BebopMirror.FindRecordFromType(item.GetType()); + return record.Encode(item); + } + + /// + public T Deserialize(byte[] serializedObject) + { + var record = BebopMirror.FindRecordFromType(typeof(T)); + if (record.Decode(serializedObject) is T value) + return value; + + throw new InvalidOperationException($"Unable to cast {typeof(T)} to {record.Type}"); + } + } +} diff --git a/src/serializers/StackExchange.Redis.Extensions.Bebop/StackExchange.Redis.Extensions.Bebop.csproj b/src/serializers/StackExchange.Redis.Extensions.Bebop/StackExchange.Redis.Extensions.Bebop.csproj new file mode 100644 index 00000000..f6355c9d --- /dev/null +++ b/src/serializers/StackExchange.Redis.Extensions.Bebop/StackExchange.Redis.Extensions.Bebop.csproj @@ -0,0 +1,15 @@ + + + Use Bebop serialization with StackExchange.Redis. + Use Bebop serialization with StackExchange.Redis. + + + + + + + + + + +