public void Deserialize() { var formatter = new EnumFormatterUInt32 <Target>(new MessagePackProvider(), MessagePackContext.Empty); var reader = new MessagePackReader(new byte[] { 0 }); Target target = formatter.Deserialize(ref reader); Assert.AreEqual(Target.Value, target); Assert.Pass(reader.Print()); }
public void Serialize() { var target = Target.Value; var formatter = new EnumFormatterUInt32 <Target>(new MessagePackProvider(), MessagePackContext.Empty); var writer = new MessagePackWriter(); formatter.Serialize(ref writer, target); Assert.NotNull(writer.Buffer); Assert.AreEqual(1, writer.Position); Assert.Pass(writer.Print()); }
public override bool TryGet <T>(out IMessagePackFormatter <T> formatter) { Type type = typeof(T); if (type.IsEnum) { if (!base.TryGet(out formatter)) { Type underlyingType = type.GetEnumUnderlyingType(); TypeCode typeCode = Type.GetTypeCode(underlyingType); switch (typeCode) { case TypeCode.Byte: { formatter = new EnumFormatterByte <T>(Provider, Context); break; } case TypeCode.Int16: { formatter = new EnumFormatterInt16 <T>(Provider, Context); break; } case TypeCode.Int32: { formatter = new EnumFormatterInt32 <T>(Provider, Context); break; } case TypeCode.Int64: { formatter = new EnumFormatterInt64 <T>(Provider, Context); break; } case TypeCode.SByte: { formatter = new EnumFormatterSByte <T>(Provider, Context); break; } case TypeCode.UInt16: { formatter = new EnumFormatterUInt16 <T>(Provider, Context); break; } case TypeCode.UInt32: { formatter = new EnumFormatterUInt32 <T>(Provider, Context); break; } case TypeCode.UInt64: { formatter = new EnumFormatterUInt64 <T>(Provider, Context); break; } default: throw new ArgumentOutOfRangeException(nameof(type), $"The specified enum underlying type not supported: '{underlyingType}.'"); } Formatters.Add(type, formatter); } return(true); } formatter = null; return(false); }